Spring Data JPA和Jackson JsonIdentity古怪与一对多的关系

时间:2017-08-13 16:57:35

标签: java json hibernate jackson spring-data-jpa

我观察了一些我需要帮助的奇怪的杰克逊行为。我的简单库应用程序中有以下两个一对多关系:

  • Book包含BookCopy
  • 的列表
  • Library包含BookCopy
  • 的列表

这个想法是一本书可能有很多副本,每个图书馆都拥有书籍的副本(而不是书籍的副本)。也就是说,这是我的代码的相关片段:

Book上课:

@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Book {
    //.. rest omitted
    @OneToMany(mappedBy = "book")
    private List<BookCopy> bookCopies;
}

Library上课:

@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Library {
@OneToMany(mappedBy = "library")
private List<BookCopy> bookCopies;
}

BookCopy上课:

@Entity
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class BookCopy {
@ManyToOne
@JoinColumn(name = "book_id")
private Book book;

@ManyToOne
@JoinColumn(name = "library_id")
private Library library;
}

现在,当我添加一本书和一个图书馆,没有副本时,一切正常。当我添加书籍复制对象时,我从bookRepository.findAll()的序列化版本中得到了一些非常奇怪的输出。

这是一个示例json我正在发布以添加图书副本:

{
  "book": {
  "id": 1
  },
 "library": {
  "id": 4
 }

}

..并且事情完全坚持到DB(postgres)。但是,当我检索所有书籍时,这里有一个奇怪的JSON示例(为简洁起见):

[
  {
    "id": 1,
    "title": "Effective Java",
    "bookCopies": [
      {
        "id": 5,
        "book": 1,
        "library": {
          "id": 3 // ...
        }
      }
  },
  2
]

在书籍对象列表中注意最后一部分 - 奇怪的2无处不在。我做了一件严重错误的事 - 或者这是我遇到的杰克逊小虫?

0 个答案:

没有答案