JPA使用对象属性命名查询

时间:2013-04-25 20:28:12

标签: java hibernate jpa

我试图弄清楚如何创建一个(命名?)查询,将我的实体连接在一起。我可以为新实体使用对象属性并仍然这样做吗?我似乎无法破译它将如何/应该看起来。

我有2个表,一个order和order_assoc表。对于在订单表中创建的重新订单,将在order_assoc中创建一个条目。此外,重新订购可以基于先前的订单。所以,我在order_assoc中有一个列,告诉我它所基于的顺序。

例如,创建了一个基于前一个1的重新订购4.因此,现在关联表看起来像。

  order        order_assoc
 ------       -------------
 1 new        1 <-pk  4   1
 2 new
 3 new
 4 reorder

我有一个现有的订单实体类。我在assoc表中添加了一个引用(新实体)

  @OneToOne(fetch = FetchType.LAZY,  optional = true, cascade = {CascadeType.ALL},
mappedBy = "onlineAdoptionEntity", targetEntity = OnlineAdoptionReOrderAssocEntity.class)
private OnlineAdoptionReOrderAssocEntity reOrderAssocEntity;

新实体看起来像这样。

    @Id
@Column(name = "OA_REORDER_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "reOrderNumberSeq")
@SequenceGenerator(name = "reOrderNumberSeq", sequenceName = "REORDER_NUMBER_SEQ", allocationSize=1)
private Long id;

@OneToOne(optional = true,cascade = CascadeType.ALL)
@JoinColumn(name="OA_ADOPTION_ID")
private OnlineAdoptionEntity onlineAdoptionEntity;


@ManyToOne(optional = true)
@JoinColumn(name="OA_ORIGINAL_ADOPTION_ID_ASSOC")
private OnlineAdoptionEntity baseReOrderAdoption;

非常感谢任何帮助。我看到有一篇类似的帖子here - 在阅读这篇文章之后我还不清楚。

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是加入运营商:

SELECT ro FROM Order ro
  INNER JOIN o.reOrderAssocEntry roa
  INNER JOIN roa.baseReOrderAdoption bo
  bo.key = :value

我建议阅读JPQL Language reference