使用对象属性的 JPA 命名查询

Posted

技术标签:

【中文标题】使用对象属性的 JPA 命名查询【英文标题】:JPA Named query using object properties 【发布时间】:2013-04-25 20:28:12 【问题描述】:

我想弄清楚如何创建一个(命名的?)查询,它将我的实体连接在一起。我可以为新实体使用对象属性并且仍然这样做吗?我似乎无法理解它会/应该是什么样子。

我有 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

我有一个现有的订单实体类。我向关联表添加了一个引用(新实体)

  @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】:

我认为您正在寻找的是连接运算符:

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

我推荐阅读JPQL Language reference

【讨论】:

以上是关于使用对象属性的 JPA 命名查询的主要内容,如果未能解决你的问题,请参考以下文章

三 JPA复杂查询的几种方式

在批量更新命名查询的情况下,JPA 中不会更新版本

如何使用 JPA 和 Hibernate 通过自定义对象实体属性进行查询

具有多个实体的命名查询并获取多个属性

JPA命名查询与标准API?

如何在 Spring Data (JPA) 派生查询中按多个属性排序?