【问题标题】:How to create custom queries with spring data, hibernate, for mapped entities?如何使用弹簧数据、休眠、映射实体创建自定义查询?
【发布时间】:2017-12-08 22:16:42
【问题描述】:

我想要的是一个类似的查询:

SELECT s FROM First s WHERE s.x = :x and s.secondId.thirdId.id = :id;

我正在尝试将此迁移到 Spring 数据。 我不知道我的存储库中的方法名应该是什么。

我的实体:

First{
    int x;
    @JoinColumn(name = "second_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Second secondId;
}

Second{
    int id;
    @JoinColumn(name = "third_id", referencedColumnName = "id")
    @ManyToOne(optional = false)
    private Third thirdId;
    int c;
}

Third {
    int id;
    // more data here
    int b;
    int c;
}

我试过了:findByThirdIdAndX(int id, xval); 得到:

派生查询无效!没有找到类型 First 的属性 thirdId

我怎样才能做到这一点?

【问题讨论】:

    标签: java spring hibernate spring-boot spring-data


    【解决方案1】:

    thirdIdsecondId 的属性,它是 First 的属性。您可以这样指定:

    findBySecondIdThirdIdIdAndX(int id, int xval);
    

    Here 是嵌套属性的相关文档。

    【讨论】:

    • 变量名是SecondId和ThirdId所以方法名应该是:findBySecondIdThirdIdIdAndX(int id, int xval)findBySecondId_ThirdId_IdAndX(int id, int xval)
    • 谢谢。对于此类查询,它的编写方法名称有点复杂。一点后不可读。应该有什么替代方案?原生查询?
    • @SachinSharma 是的,我在 spring 数据存储库中看到了超过 120 个字符的方法名称。在这种情况下,使用 @Query 来缩短方法名称是可能的,但也有优缺点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 2020-08-10
    • 2019-12-03
    • 2020-12-18
    • 1970-01-01
    相关资源
    最近更新 更多