Hibernate双向映射

时间:2016-01-14 07:55:53

标签: java spring hibernate

我有两张桌子。 发表

enter image description here

喜欢

enter image description here

在这些之间做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;
    }

问题

  1. 协会是否正确发布 {@OneToMany}和 {@ManyToOne}?
  2. 获取类型是Lazy但仍然获得依赖循环。为什么呢?
  3. 试过

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

    1. {@XmlTransient}
    2. {@ JsonIgnore}
    3. {@ JsonManagedReference}和{@JsonBackReference}
    4. 你能帮助我,问题还有什么地方吗?感谢。

      修改

      1. 使用@OneToMany
      2. 添加了mappedBy =“post”
      3. 在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) }

1 个答案:

答案 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?哪个编组?你尝试过什么代码?你有什么问题?没有这些信息,就无法回答。