繁体   English   中英

JPA实体的集合成员分离或不受管理

[英]JPA entity's collection members get detached or not managed

TGIF伙计们,但我仍然停留在我的一个项目上。 我有两个接口IMasterOrderIOrder 一个IMasterOrder可以具有收藏IOrder 因此,可以有几个实现接口的MasterOrder实体类和Order实体类。

为了简化编码,我在各处创建了IMasterOrderIOrder对象,但是当需要指定具体类型时,只需将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM