Spring存储库接口:按类型查询方法

Ste*_* K. 5 spring spring-data spring-data-jpa

我想知道是否可以使用springs的查询方法指定特定的子类型。

例如,如果有一个MailUserChatUser,两个都extend User带有InheritanceType.SINGLE_TABLE-我可以找到所有MailUser带有的s PersonRepository吗?

或者在多个类的情况下,我可以找到User不包括所有的所有MailUsers extend User吗?

public interface PersonRepository extends Repository<User, Long> {

  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
...
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*lik 3

您无法通过基于方法名称的自动查询创建来完成此操作,Spring Data 不支持它(请参阅此处了解支持的表达式)。但是,您可以手动@Query指定 JPQL 查询,并使用TYPE(entity)子句中的运算符WHERE来缩小范围到特定的实体类型。请参阅JPA 规范 4.6.17.5 实体类型表达式

实体类型表达式可用于限制查询多态性。该TYPE运算符返回参数的确切类型。

[...]

例子:

SELECT e
FROM Employee e
WHERE TYPE(e) IN (Exempt, Contractor)

SELECT e
FROM Employee e
WHERE TYPE(e) IN (:empType1, :empType2)

SELECT e
FROM Employee e
WHERE TYPE(e) IN :empTypes

SELECT TYPE(e)
FROM Employee e
WHERE TYPE(e) <> Exempt
Run Code Online (Sandbox Code Playgroud)