簡體   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