我可以使用什么JPA命名查询来访问ManyToMany连接?

时间:2013-04-10 19:26:36

标签: jpa named-query

我有一个名为'Order'的JPA实体。当订单被“续订”(通过细微更改复制)时,我会在“续订”订单中存储对原始订单的引用。

JPA实体参考:

@ManyToMany
@JoinTable(name = "OP_ORDER_RENEWAL", joinColumns = @JoinColumn(name = "ORDER_ID"), inverseJoinColumns = @JoinColumn(name = "RENEWED_ORDER_ID"))
private List<Order> renewedOrders = new ArrayList<Order>();

'续订'方法:

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public Order renewOrder(Order originalOrder) {
  Order newOrder = new Order();
  ..............
  List<Order> listOfOrdersThisOrderIsRenewing = new ArrayList<Order>();
  listOfOrdersThisOrderIsRenewing.add(originalOrder);
  newOrder.setRenewedOrders(listOfOrdersThisOrderIsRenewing);
  em.persist(newOrder);
  return newOrder;
}

每当我尝试使用getter方法访问Renewed Orders列表时:

public List<Order> getRenewedOrders() {
      return renewedOrders;
}

我得到了'懒得初始化角色集'错误。在使用Google搜索此错误后,我决定使用单独的NamedQuery来获取RenewedOrders:

@NamedQuery(name = "Order.getRenewedOrders", query = "select o from Order o join fetch o.renewedOrders where o.id = :orderId")

当我使用NamedQuery时,查询返回Order本身,而不是其续订订单。

1 个答案:

答案 0 :(得分:1)

最终为我工作的查询:

select r from Order o left outer join o.renewedOrders r where o.id =:orderId