我观察了一些我需要帮助的奇怪的杰克逊行为。我的简单库应用程序中有以下两个一对多关系:
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
无处不在。我做了一件严重错误的事 - 或者这是我遇到的杰克逊小虫?