3

我目前在使用 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,一切正常,但反向根本不起作用。关系始终为空。

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

这非常有效,我得到了预期的结果。我也检查了数据库中保存的内容,没关系。有没有人知道为什么这种关系只在一个方向上起作用?

问候,

亚历克斯

4

1 回答 1

1

这是因为默认情况下@onetomany 具有延迟获取。您可以使用此 fetch = FetchType.EAGER解决此问题

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

    // Other stuff...
}
于 2013-07-09T10:47:03.200 回答