如何在JPA现有查询中添加Register.reference匹配条件?
可行,有两种常见实现方式
1. 使用Spring Data JPA派生查询方法名
直接扩展方法名来关联实体条件即可,前提是StockholderIndividual实体类中存在指向Register的关联属性(比如命名为register),示例如下:
fun findByRegisterReferenceAndPersonFirstNameContainsOrPersonLastNameContains( registerReference: String, firstName: String?, lastName: String? ): MutableList<StockholderIndividual>?
注意:需要确保StockholderIndividual与Register的关联关系已正确映射,比如在StockholderIndividual类中添加
@ManyToOne或@OneToOne注解的register属性,指向Register实体。
如果需要更明确的逻辑(避免OR条件的歧义),也可以拆分条件:
fun findStockholderIndividualByRegisterReferenceAndPersonFirstNameContainsOrRegisterReferenceAndPersonLastNameContains( registerRef1: String, firstName: String?, registerRef2: String, lastName: String? ): MutableList<StockholderIndividual>?
2. 使用@Query注解自定义JPQL查询
如果方法名过长不易维护,直接编写JPQL语句会更直观灵活:
@Query("SELECT s FROM StockholderIndividual s WHERE s.register.reference = :registerRef AND (s.person.firstName LIKE %:firstName% OR s.person.lastName LIKE %:lastName%)") fun findStockholderIndividualsByRegisterRef( @Param("registerRef") registerRef: String, @Param("firstName") firstName: String?, @Param("lastName") lastName: String? ): MutableList<StockholderIndividual>?
这种方式适合复杂查询场景,只需保证参数名与JPQL中的占位符一一对应即可。
内容的提问来源于stack exchange,提问作者Nicole Foster
相关产品推荐
相关产品推荐

