繁体   English   中英

Hibernate双向映射

[英]Hibernate bidirectional mapping

我有两张桌子。 岗位

在此输入图像描述

喜欢

在此输入图像描述

做这些之间的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. 获取类型是Lazy但仍然获得依赖循环。 为什么?

试着

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

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

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

编辑

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

    编组到JSON并得到以下异常

    {org.springframework.http.converter.HttpMessageNotWritableException:无法写内容:无法初始化代理 - 无会话(通过引用链: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 [ “喜欢”] - > org.hibernate.collection.internal.PersistentBag [0] - > com.myproject.admin.model.post.Like [ “用户”] - > com.myproject .admin.model.user.User _ $$ _ jvst328_b [“pictureId”])org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:271)}

Post {@OneToMany}和Like {@ManyToOne}是正确的协会吗?

不,这不对。 你有什么两个独立的协会。 要使它成为单个双向关联,OneToMany端必须是ManyToOne的反面:

@OneToMany(mappedBy = "post")

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

获取类型是Lazy但仍然获得依赖循环。 为什么?

这与Hibernate无关,而且与JSON或XML marshaller有关。 关联是懒惰的事实与它无关:它看到了getPost( )或getLikes()方法,所以它调用它。 调用它会懒惰地加载帖子或者喜欢的东西并将它们/它们返回到编组器,因此编组结果。

您尝试使用XML和JSON注释这一事实令人怀疑:您是否正在编组JSON或XML? 哪个编组? 你尝试过什么代码? 你有什么问题? 没有这些信息,就无法回答。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM