【发布时间】:2012-06-15 22:55:43
【问题描述】:
TGIF 伙计们,但我仍然坚持我的一个项目。我有两个接口IMasterOrder 和IOrder。一个IMasterOrder 可能有一个IOrder 的集合。所以可以有几个MasterOrder实体类和Order实体类实现接口。
为了简化编码,我在各处创建IMasterOrder 和IOrder 对象,但是当它需要指定具体类型时,我只需将IMasterOrder 对象转换为类类型。
问题是,这使得主类总是返回关于其订单的空值。我很好奇 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 order实体实例的finder方法是这样的
public static MasterOrder findMasterOrder(String id) {
if (id == null || id.length() == 0) return null;
return entityManager().find(MasterOrder.class, id);
}
但是,此 finder 方法中的 MasterOrder 实例返回的 customFields 以及日志和订单都为空。那么如何解决这个问题呢?提前致谢。
【问题讨论】:
-
认为你必须展示一些代码。特别是当你坚持和当你查询/使用..
-
请记住,JPA 没有指定对接口类型(或接口集合)的字段的支持,尽管 DataNucleus JPA 等一些实现确实提供了对这些字段的支持(供应商扩展)
-
@barsju 感谢您的反馈。我已经更新了帖子,很高兴你能提供一些提示。
-
我认为您也应该显示 Order 类。
标签: java spring hibernate jpa openjpa