【问题标题】:Spring Data JPA query building via "query creation" method for @embeddedID通过 @embeddedID 的“查询创建”方法构建 Spring Data JPA 查询
【发布时间】:2016-04-22 21:16:12
【问题描述】:

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

例如我有

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

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

【问题讨论】:

    标签: java spring hibernate spring-mvc jpa


    【解决方案1】:

    我不确定 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> {..}
    

    【讨论】:

      【解决方案2】:

      我想我找到了答案,奇怪的是它在文档中,但我只是没有接受它。您只需要通过驼峰式案例将属性组合在一起。我本可以发誓我试过这个,但显然我的案子搞砸了。

      http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.query-methods.query-property-expressions

      第 4.4.3 节。属性表达式

      但是,您也可以通过遍历嵌套属性来定义约束。假设一个人有一个带有邮政编码的地址。在这种情况下,方法名称为

      列出 findByAddressZipCode(ZipCode zipCode);

      创建属性遍历 x.address.zipCode。解析算法首先将整个部分 (AddressZipCode) 解释为属性,并检查域类中具有该名称的属性(未大写)。如果算法成功,它将使用该属性。如果不是,该算法将源在驼峰部分从右侧拆分为头部和尾部,并尝试找到相应的属性,在我们的示例中为 AddressZip 和 Code。如果算法找到具有该头部的属性,它将获取尾部并继续从那里向下构建树,以刚才描述的方式将尾部拆分。如果第一次拆分不匹配,算法将拆分点向左移动(地址,邮政编码)并继续。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-23
        • 1970-01-01
        • 1970-01-01
        • 2015-02-21
        • 2017-08-15
        • 2022-01-23
        相关资源
        最近更新 更多