[英]JPA entity's collection members get detached or not managed
TGIF伙计们,但我仍然停留在我的一个项目上。 我有两个接口IMasterOrder
和IOrder
。 一个IMasterOrder
可以具有收藏IOrder
。 因此,可以有几个实现接口的MasterOrder
实体类和Order
实体类。
为了简化编码,我在各处创建了IMasterOrder
和IOrder
对象,但是当需要指定具体类型时,只需将IMasterOrder
对象转换为类类型。
问题是,这使主类始终对其订单返回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...
获取主订单实体实例的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仍然是活动持久性上下文的一部分吗? 即:找到或清除了发现主实体的EntityManager吗? 如果是,则一切正常。
对于傻笑,您可以尝试将日志和订单的fetch属性更改为EAGER ...这将有助于查明是否还有其他不良情况。
@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private List<OrderLog> logs;
@OneToMany(mappedBy = "masterOrder", fetch = FetchType.LAZY)
private Collection<Order> orders;
听起来好像是映射有问题。.我不认为空集合应该为NULL,它们应该不是空列表(如果已初始化),或者是从中读取时将初始化的代理。 如果您离开事务并尝试从集合中读取数据,则应该抛出一个延迟的初始化异常。 无论哪种情况,都应在问题中包括所有相关的类别,以提供更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.