复合键的 Json 结构



我正在尝试实现此解决方案:BookPublisher有一个复合键,所以我构建了可嵌入的类:

    @Embeddable
    public class BookPublisherID implements Serializable{
        private int bookID;
        private int publisherID;
//getters and constructor

这是 bookPublisher 类:

@Entity
    @Table(name = "book_publisher")
    public class BookPublisher implements Serializable{
        @EmbeddedId
        private BookPublisherID id;
        private Date publishedDate;
        @MapsId("bookID")
        @ManyToOne
        @JoinColumn(name = "book_id")
        private Book book;
        @MapsId("publisherID")
        @ManyToOne
        @JoinColumn(name = "publisher_id")
        private Publisher publisher;
//getters and setters

这是书课:

 @Entity
    public class Book{
        private int id;
        private String name;
    @OneToMany(mappedBy = "book", cascade = CascadeType.ALL, orphanRemoval = true)
        private Set<BookPublisher> bookPublishers;
 //getters and setters

发布者类:

    @Entity
        public class Publisher{
            private int id;
            private String name;
        @OneToMany(mappedBy = "book", cascade = CascadeType.ALL, orphanRemoval = true)
            private Set<BookPublisher> bookPublishers;
 //getters and setters

图书出版商存储库:

public interface BookPublisherRepository extends JpaRepository<BookPublisher, BookPublisherID>{}

这是实现:

@Service
public class BookPublisherImpl implements BookPublisherMetier{

    @Autowired
    private BookPublisherRepository bookPublisherRepository;
    @Override
    public BookPublisher savePublication(BookPublisher bookPublisher) {
                bookPublisher.setPublishedDate(new Date());
        return bookPublisherRepository.save(bookPublisher);
    }
}

问题是如何在复合键的情况下在 Json 中添加 bookPublisher(我与邮递员一起工作(。我尝试了下面的解决方案和其他可能性,但我遇到了同样的问题:试图从空的一对一属性分配 ID [com.example.entities.BookPublisher.book]

{  
        "id": {
            "bookID":1,
            "publisherID":1
        },
        "book":{
            "id":1
        },
        "publisher":{
            "id":1
      } 
}

非常感谢。

我在这里看到了几个关键项目。

  1. 如果你对对象所做的只是基本的getter和setter,你应该只使用默认属性,而不是定义私有字段。 我发现即使不必自己实现可序列化,这也将始终序列化。 此外,请注意私有变量不会序列化,因为它们不可访问。
  2. 需要使用自定义持有者对象,而不是使用实体对象。 您需要为关系选取一个基本对象和一个方向。 实体对象包括返回到您来自的相关对象的关系,从而创建无法序列化的循环引用。 它只会在他们之间无限地移动。 您需要使用不这样做的对象结构。

相关内容

  • 没有找到相关文章

最新更新