在我的Spring Boot Rest应用程序中,我具有三个模型类
User
,Business
,Review
User.java
@OneToMany(cascade = CascadeType.ALL, mappedBy = "partner",fetch =
FetchType.LAZY)
private Set<Business> business;
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="user")
private List<Review> reviews;
Business.java
@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="business")
private List<Review> reviews;
@JoinTable(name = "business_service",
joinColumns = { @JoinColumn(name = "business_id_fk") },
inverseJoinColumns = { @JoinColumn(name = "serviceIdFk") })
private List<ServiceVO> services = new ArrayList<ServiceVO>();
Review.java
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "businsessIdFk")
private Business business;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "addedBy", nullable = false)
private User user;
[当我尝试通过存储库查找具有business_id的业务时,我得到了一个无限的递归Json列表。我必须找到具有user_id的User,但是也会发生同样的事情。
任何帮助将不胜感激
注意:我已经按照答案中的说明使用了JsonIgnore。它使我收到另一个杰克逊绑定错误
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No
serializer found for class
org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no
properties discovered to create BeanSerializer (to avoid exception,
disable
SerializationFeature.FAIL_ON_EMPTY_BEANS) (through reference chain:
com.ovoox.model.Business["services"]-
>org.hibernate.collection.internal.PersistentBag[0]-
com.ovoox.model.ServiceVO$HibernateProxy$
TOMK9CML["hibernateLazyInitializer"])
在这种情况下,用户与审阅之间存在一对多关系,而审阅也与用户之间存在许多关系。因此,每当您检索User时,您都会获得Reviews列表,而后者又是user,导致这是JSON无限递归。要摆脱这种情况,请尝试以下代码:
在Review.java POJO
import org.codehaus.jackson.annotate.JsonIgnore;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "businsessIdFk")
private Business business;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "addedBy", nullable = false)
private User user;
@JsonIgnore
public Business getBusiness(){
return business;
}
@JsonIgnore
public User getUser(){
return user;
}
使用@JsonIgnore删除此对象以避免递归。