gpt4 book ai didi

java - Hibernate 双向映射

转载 作者:行者123 更新时间:2023-11-29 04:52:52 25 4
gpt4 key购买 nike

我有两张 table 。发布

enter image description here

喜欢

enter image description here

在这些之间做hibernate注解映射所以 Post bean 中的关联就像....

private List<Like> likes;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "post")
public List<Like> getLikes() {
return likes;
}

并且在Like bean

private Post post;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "PostId")
@JsonIgnore
public Post getPost() {
return post;
}

问题

  1. 通过Post {@OneToMany} 和Like {@ManyToOne} 关联是否正确?
  2. 抓取类型是惰性的,但仍然存在依赖循环。为什么?

尝试过

为了消除依赖循环,我尝试了

  1. { @XmlTransient}
  2. {@JsonIgnore}
  3. {@JsonManagedReference} 和 {@JsonBackReference}

你能帮帮我吗,问题还出在哪里?谢谢。

编辑

  1. 使用@OneToMany 添加了 mappedBy = "post"
  2. 在 getPost() 上添加了@JsonIgnore

    编码为 JSON 并得到以下异常

    {org.springframework.http.converter.HttpMessageNotWritableException: 无法写入内容:无法初始化代理 - 无 session (通过引用链:java.util.HashMap["post"]->java.util.ArrayList[0 ]->com.myproject.admin.model.post.Post["喜欢"]->org.hibernate.collection.internal.PersistentBag[0]->com.myproject.admin.model.post.Like["用户"]->com.myproject.admin.model.user.User_$$_jvst328_b["pictureId"]);嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: 无法初始化代理 - 无 session (通过引用链:java.util.HashMap["post"]->java.util.ArrayList[0]->com.myproject .admin.model.post.Post["likes"]->org.hibernate.collection.internal.PersistentBag[0]->com.myproject.admin.model.post.Like["user"]->com.myproject .admin.model.user.User_$$_jvst328_b["pictureId"]) org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:271)

最佳答案

Is the association is right by Post {@OneToMany} and by Like {@ManyToOne} ?

不,这是不正确的。你所拥有的是两个独立的协会。要使其成为单个双向关联,OneToMany 端必须是 ManyToOne 的相反端:

@OneToMany(mappedBy = "post")

请注意,LAZY 是 toMany 关联的默认值。

The fetch type is Lazy but still getting the dependency cycle. why?

这与 Hibernate 无关,而与您的 JSON 或 XML 编码器有关。关联是惰性的这一事实与它无关:它看到一个 getPost() 或一个 getLikes() 方法,所以它调用它。调用它会延迟加载帖子或类似内容,并将它/它们返回给编码器,从而编码结果。

您尝试使用 XML 和 JSON 注释的事实值得怀疑:您是编码为 JSON 还是 XML?用哪个编码器?你试过什么代码?你有什么问题?没有这些信息,就无法回答。

关于java - Hibernate 双向映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34784270/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com