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

时间:2015-04-13 14:29:20

标签: spring spring-data spring-data-jpa

我想知道是否可以使用弹簧来指定特定的子类型。 query methods

例如,如果有MailUserChatUser extend User InheritanceType.SINGLE_TABLE - 我可以找到MailUser的所有PersonRepository }}?

或者,我可以在多个班级User的情况下找到排除所有MailUser的所有extend User吗?

public interface PersonRepository extends Repository<User, Long> {

  List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
...
}

1 个答案:

答案 0 :(得分:2)

您无法使用基于方法名称的自动查询创建,Spring Data不支持它(有关受支持的表达式,请参阅here)。但是,您可以use @Query手动指定JPQL查询,并使用TYPE(entity)子句中的WHERE运算符缩小到特定实体类型。请参阅JPA spec 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