You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:10:25