簡體   English   中英

JPA / Hibernate:雙向OneToMany / ManyToOne關系僅適用於單向

[英]JPA/Hibernate: bidirectional OneToMany/ManyToOne relation only works unidirectional

我目前遇到的OneToMany / ManyToOne-Mapping問題。 映射看起來像這樣:

public class A implements Serializable {
    @EmbeddedId
    private AId id;

    // Other stuff...
}

@Embeddable
public class AId implements Serializable {
    @ManyToOne
    @JoinColumn(name = "B_ID", nullable = false)
    private B b;

    // Other stuff...
}

public class B implements Serializable {
    @OneToMany(mappedBy = "id.b")
    private List<A> as;

    // Other stuff...
}

如果我嘗試使用對象A訪問對象B一切正常,但反方向根本不起作用。 關系始終為null。

A objectA = findAById(id);
B objectB = objectA.getB(); // OK

// But... for example
objectB.getAs(); // returns null

我寫了一個小查詢來使用其主鍵獲取對象B的所有As:

SELECT as FROM B b, IN(b.as) as WHERE b.id = :id

這很完美,我得到了預期的結果。 我也檢查了數據庫中存在的內容,並且沒問題。 有沒有人知道為什么這種關系只能在一個方向上起作用?

問候,

亞歷克斯

這是因為默認情況下@onetomany有懶惰的提取。 你可以使用這個fetch = FetchType.EAGER來解決這個問題

public class B implements Serializable {
    @OneToMany(mappedBy = "id.b", fetch = FetchType.EAGER)
    private List<A> as;

    // Other stuff...
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM