【问题标题】:Hibernate bidirectional mappingHibernate 双向映射
【发布时间】:2016-04-19 11:09:45
【问题描述】:

我有两张桌子。 发布

喜欢

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

private List<Like> likes;

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

并在喜欢

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. 添加了 mappedBy = "post" 和 @OneToMany
  2. 在 getPost() 上添加了@JsonIgnore

    编组到 JSON 并得到以下异常

    {org.springframework.http.converter.HttpMessageNotWritableException: 无法写入内容:无法初始化代理 - 没有会话(通过引用链: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"]);嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy - no 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) }

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    Post {@OneToMany} 和 Like {@ManyToOne} 的关联是否正确?

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

    @OneToMany(mappedBy = "post")
    

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

    获取类型是惰性的,但仍然获得依赖循环。为什么?

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

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

    【讨论】:

    • 我找到了解决方案。我在 Like bean 上使用 @JsonIgnoreProperties({"post"}) 并在 POm.xml com.fasterxml.jackson.datatype 中添加以下依赖项jackson-datatype-hibernate42.5.5
    猜你喜欢
    • 2010-10-05
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    相关资源
    最近更新 更多