TGIF 伙计们,但我仍然停留在我的一个项目上。我有两个接口(interface) IMasterOrder
和 IOrder
。一个IMasterOrder
可能有一个IOrder
集合。因此可以有多个实现接口(interface)的 MasterOrder
实体类和 Order
实体类。
为了简化编码,我在各处创建了 IMasterOrder
和 IOrder
对象,但是当需要指定具体类型时,我只需强制转换 IMasterOrder
> 类类型的对象。
问题是,这使得 master 类总是返回有关其订单的 null 。我很好奇 JPA 一般如何处理多态性?
更新
对于早期的困惑,我们深表歉意。其实问题要简单得多
其实实体类是这样的
public class MasterOrder implements IMasterOrder {
// Relationships
@OneToOne(mappedBy = "masterOrder")
private OrderCustomFields customFields;
@OneToMany(mappedBy = "masterOrder")
private List<OrderLog> logs;
@OneToMany(mappedBy = "masterOrder")
private Collection<Order> orders;
// Fields...
而获取Master订单实体实例的finder方法是这样的
public static MasterOrder findMasterOrder(String id) {
if (id == null || id.length() == 0) return null;
return entityManager().find(MasterOrder.class, id);
}
但是,此 finder 方法中的 MasterOrder 实例返回的 customFields 以及日志和订单均为 null。那么如何解决这个问题呢?提前致谢。
最佳答案
当您访问日志和订单时,Master 仍然是 Activity 持久化上下文的一部分吗?即:找到主实体的EntityManager是否已关闭或清除?如果是,则一切都按预期进行。
对于咯咯笑,您可以尝试将日志和订单上的 fetch 属性更改为 EAGER ...这将有助于查明是否存在其他问题。
@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private List<OrderLog> logs;
@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private Collection<Order> orders;
关于java - JPA 实体的集合成员分离或不受管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059140/