这是一个简单的One-to-Many
关系:Order
to Items
。一个订单可以包含许多项目。ORDERITEMSMAPPING
并且两个实体之间有一个关联表,在Order.java中建立了如下关系:
@OneToMany(fetch = FetchType.LAZY)
@JoinTable(name = "ORDERITEMSMAPPING",
joinColumns = @JoinColumn(name = "ORDER_ID"),
inverseJoinColumns = @JoinColumn(name = "ITEM_ID"))
@OrderBy("typeId, shortName")
@JsonIgnore
private List<Item> Items;
FetchType.LAZY
由于数据负载而进行上述映射的原因对于映射Eager
来说是巨大的
但是,在 Java EE 方面,我们需要调用 getter 以使用 Order 的getItems()
方法从特定的一个订单中查找所有项目,但是在一个事务中。
这是 Order 实体中的工作:
public List<Item> getItems(Order order){
if(this.items==null){
List<Item> items= new ArrayList<Item>();
EntityManager em = Order.entityManager();
Order merged = em.merge(order);
items = merged.getItems();
em.close();
return items;
}else{
return this.items;
}
}
但是,上述方法不起作用,null
即使调用仍然返回项目
合并的.getOrders();
我toughtmerge()
方法可以返回实体的托管副本并使LAZY
映射可用,但这似乎不是真的。
顺便说一句,我正在使用 OpenJPA,但我猜 JPA 供应商似乎不是问题。可能我对实体管理周期还不是很深入。请帮忙。谢谢。