java - 通过 @embeddedID 的 "query creation"方法构建 Spring Data JPA 查询

标签 java spring hibernate spring-mvc jpa

我正在努力寻找有关如何查询模型中更复杂属性的任何类型的文档。

例如我有

public class MyEmbedded{
@EmbeddedID
private MyEmbeddedPK embeddedPK;
}

@Embeddable
public class MyEmbeddedPK{

     private Integer age;

     private Integer zip;       
}

在我的存储库中,我正在实现 CrudRepository 并希望能够做到

public List<MyEmbedded> findByageAndZip(String age, String zip);

但这似乎不起作用。该文档并没有真正说明有关 @EmbeddedId 的任何内容。查询 @OneToMany 属性也是如此,我从未找到任何相关内容。

我正在引用的文档。 http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords

是否有关于此查询创建如何工作的更好文档?

最佳答案

我不确定 Spring Data Jpa 是否支持此功能,并且基于嵌入的 id 属性进行查询似乎有点复杂,因为它同样适用于封闭实体本身的状态字段。但这可以通过 JP QL 通过 Query 指定来轻松实现。和@Param

@Query("SELECT m FROM MyEmbedded m WHERE m.embeddedPK.age = :age AND m.embeddedPK.zip = :zip")
public List<MyEmbedded> findByageAndZip(@Param("age") String age, @Param("zip") String zip);

另外,不要忘记使用以下签名指定您的存储库,因为 Spring 数据运行时需要知道 ID 类的实际类型。

@Repository
public interface MyEmbeddedRepository extends CrudRepository<MyEmbedded, MyEmbeddedPK> {..}

关于java - 通过 @embeddedID 的 "query creation"方法构建 Spring Data JPA 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36803442/

相关文章:

Java JPA 负载平衡读取查询以读取 MySql DB 从站

java - 使用 AspectJ : Can't get aspect called 的新手

java - 如何在不使用集合的情况下从 Java 中的给定数组中删除重复元素

java - 带有 Gradle 的 Tomcat 上的 Spring REST 服务

java - Spring mvc 表中的外字段不会更新

java - 从3.1.2升级到3.2.1.Release,无法解析@repository和getJdbcTemplate

hibernate - 使用 DiscriminatorOptions 和 orphanremoval 继承实体的 JPA OneToMany

hibernate - Spring:尚未配置事务管理器

java - 如何以编程方式更改 Google Cloud Datastore 项目的命名空间?

java - 在Java中注入(inject)多个参数同一个接口(interface)