含@Embedded嵌入式对象的JPA查询:能否用普通查询替代命名查询?
基于嵌入式实体字段的Spring Data JPA方法命名查询实现
完全可以直接用Spring Data JPA的方法命名查询实现需求,不需要编写命名查询。只要遵循属性嵌套命名规则,把嵌入式对象的属性名和其内部字段名拼接起来即可。
先修正实体类的小问题
你提供的MyEntity代码里,@Embedded注解的变量缺少名称,需要补充完整:
public class MyEntity { private String field1; private String field2; @Embedded private InnerEntity innerEntity; // 补充变量名innerEntity } @Embeddable public class InnerEntity { private String field3; private String field4; }
编写Repository查询方法
在Spring Data JPA的Repository接口中,直接按照findBy[嵌入式属性名][内部字段名]的格式定义方法:
import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; public interface MyEntityRepository extends JpaRepository<MyEntity, Long> { // 根据InnerEntity的field3字段查询数据 List<MyEntity> findByInnerEntityField3(String field3Value); // 还可以组合其他查询条件,比如同时匹配field1和field3 List<MyEntity> findByField1AndInnerEntityField3(String field1, String field3Value); }
实现原理
Spring Data JPA会自动解析方法名,识别出innerEntity是嵌入式属性、field3是该对象的内部字段,最终生成对应的JPQL查询,等价于:
SELECT e FROM MyEntity e WHERE e.innerEntity.field3 = ?1
内容的提问来源于stack exchange,提问作者user2108383
相关产品推荐
相关产品推荐

