考虑这个 java JPA 模型:
@Entity
@Table(name = "PARENT")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class ParentEntity { }
@Entity
@Table(name = "PARENT_Child1")
public abstract class Child1Entity extends ParentEntity { }
@Entity
@Table(name = "PARENT_Child2")
public abstract class Child2Entity extends ParentEntity { }
@Entity
@Table(name = "PARENT_Child3")
public abstract class Child3Entity extends ParentEntity { }
来自 Spring Data JPA 存储库的调用,例如:
parentRepository.findAll(specification);
将生成此查询:
select parent.id, from (select id from PARENT union all select id 1 as clazz_ from PARENT_CHILD1 union all select id, 2 as clazz_ from PARENT_CHILD2 union all select id, 3 as clazz_ from PARENT_CHILD3) parent
这正是我所期望的。但我正在寻找一种方法将联合限制为仅某些子类型,例如仅 Child2Entity 和 Child1Entity 而不是 Child3Entity。 使用 JPA 规范可以吗?
在 JPA 中,我没有 union 关键字来编写普通的 hql 查询。
要在 JPA 中使用 TABLE_PER_CLASS 继承策略时将 UNION 操作限制为特定子类型,您可以通过单独从每个表中进行选择,然后使用 IN 子句仅过滤所需的子类型来修改查询。