我是春季启动和jpa / hibernate的新手,请承担我对术语的不正确使用。
我有两个实体:书和地址。一本书在某个城市出版,存储在“地址”中,“地址”可以出版多本书。 书的数据库架构是:id,name,author,price,addressid 地址模式:addressid,addressCountry,addressCity 书的实体:
@Entity
@Table(name = "test_book")
public class Book implements Serializable {
private static final long serialVersionUID = 8025948150436422040L;
@Id
long id;
@Column(name = "name")
String name;
@Column(name = "author")
String author;
@Column(name = "price")
long price;
@ManyToOne
@JoinColumn(name = "addressid")
private Address address;
...//getter and setter
地址实体
@Entity
@Table(name = "test_address")
public class Address implements Serializable{
private static final long serialVersionUID = -3541059157210384355L;
@Id
@Column(name= "addressid")
private long addressId;
@Column(name="addresscountry")
private String addressCountry;
@Column(name="addresscity")
private String addressCity;
@OneToMany(mappedBy = "address")
private Collection<Book> books;
...//getter setter
但是当我打电话给Restful服务时,我会得到无限循环......
[{“id”:11,“name”:“Java Book”,“author”:“Jame Gosling”,“price”:100,“address”:{“addressId”:1,“addressCountry”: “中国”,“地址城市”:“上海”,“书籍”:[{“id”:11,“名称”:“Java书”,“作者”:“Jame Gosling”,“价格”:100,“地址“:...
我做了一些搜索。我的要求是: 当我搜索一本书时,我可以获得这些信息:id,name,author,price,address .. 而且我也可以查询地址以获得该城市出版的所有书籍。 当我在地址中添加Json Annotation @JsonManagedReference和书本实体中的@JsonBackReference时,我可以查询书籍但无法获取地址信息。
请问您如何解决问题?非常感谢你。
答案 0 :(得分:0)
您可以忽略图书的getter上的@JsonIgnore
。这将排除Collection<Book> books
属性序列化地址。
链接:JacksonAnnotations - Faster XML Wiki
示例:
@JsonIgnore
public Collection<Book> getBooks() {
...
}
答案 1 :(得分:0)
<强> @JsonIgnore 强>
杰克逊的注释@JsonIgnore用来告诉杰克逊忽略了 Java对象的某些属性(字段)。该属性被忽略 在将JSON读入Java对象时,以及在编写Java时 将对象转换为JSON。
在你的情况下,这是因为存在双向关系而发生,因此它将进入循环。要阻止这种情况,您需要提供JsonIgnore
所以你的代码就像:
- &GT;地址实体
@Entity
@Table(name = "test_address")
public class Address implements Serializable{
private static final long serialVersionUID = -3541059157210384355L;
@Id
@Column(name= "addressid")
private long addressId;
@Column(name="addresscountry")
private String addressCountry;
@Column(name="addresscity")
private String addressCity;
@OneToMany(mappedBy = "address")
@JsonIgnore
private Collection<Book> books;