我有两张桌子。 发表
和喜欢
在这些之间做hibernate注释映射 所以发布 bean中的关联就像....
private List<Like> likes;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "post")
public List<Like> getLikes() {
return likes;
}
和赞 bean
private Post post;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PostId")
@JsonIgnore
public Post getPost() {
return post;
}
问题
试过
为了删除依赖循环,我尝试了
你能帮助我,问题还有什么地方吗?感谢。
修改
在getPost()
上添加了@JsonIgnore编组到JSON并获得以下异常
{org.springframework.http.converter.HttpMessageNotWritableException:无法写内容:无法初始化代理 - 无会话(通过参考链:java.util.HashMap [“post”] - &gt; java.util.ArrayList [ 0] - &GT; com.myproject.admin.model.post.Post [ “喜欢”] - &GT; org.hibernate.collection.internal.PersistentBag [0] - &GT; com.myproject.admin.model.post.Like [ “用户”] - &GT; com.myproject.admin.model.user.User _ _ $$ jvst328_b [ “pictureId”]);嵌套异常是com.fasterxml.jackson.databind.JsonMappingException:无法初始化代理 - 没有Session(通过引用链:java.util.HashMap [“post”] - &gt; java.util.ArrayList [0] - &gt; com .myproject.admin.model.post.Post [ “喜欢”] - GT; org.hibernate.collection.internal.PersistentBag [0] - &GT; com.myproject.admin.model.post.Like [ “用户”] - &GT; com.myproject.admin.model.user.User _ _ $$ jvst328_b [ “pictureId”]) org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:271) }
答案 0 :(得分:3)
通过Post {@OneToMany}和Like {@ManyToOne},该协会是否正确?
不,这不对。你有什么两个独立的协会。为了使它成为单一的双向关联,OneToMany方必须是ManyToOne的反面:
@OneToMany(mappedBy = "post")
请注意,LAZY是toMany关联的默认值。
fetch类型是Lazy但仍然获得依赖循环。为什么呢?
这与Hibernate无关,而与JSON或XML marshaller有关。关联是懒惰的事实与它无关:它看到getPost(
)或getLikes()
方法,因此它会调用它。调用它会懒惰地加载帖子或者喜欢它并将它们/它们返回到编组器,从而对结果进行编组。
您尝试使用XML和JSON注释的事实令人怀疑:您是否正在编组JSON或XML?哪个编组?你尝试过什么代码?你有什么问题?没有这些信息,就无法回答。