繁体   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