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

标签 java spring hibernate jpa openjpa

TGIF 伙计们,但我仍然停留在我的一个项目上。我有两个接口(interface) IMasterOrderIOrder。一个IMasterOrder 可能有一个IOrder 集合。因此可以有多个实现接口(interface)的 MasterOrder 实体类和 Order 实体类。

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

相关文章:

java - 泛型函数是如何在java中实现的?

spring - 启动时Tomcat超时(spring maven hibernate)

java - 使用 Spring 解析和使用 HTTP Range header

java - JSTL formatNumber 显示空字符串

mysql - Spring GetHibernateTemplate() 或 GetSession()

java - 从泛型类返回数组

java - Alpha Beta 修剪似乎并没有提高我的国际象棋 minimax 性能

java - 如何使用更新信息以编程方式获取 Java 版本

java - Hibernate 忽略了我的持续调用?

java - Hibernate 5. 将 SQL DDL 生成到文件中