Spring Data 命名查询,以外键为Where条件时,生成的SQL一定会关联外表吗?

发布于 2022-09-12 01:38:00 字数 809 浏览 18 评论 0

A表B表 是一对多关系

class A {
    Long id;
}

class B {
    Long id;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn("aid")
    A a;
}

BRepository 中创建命名查询 List<B> findByAId(Long aid)

生成的 SQL 是:

select b.* from b left outer join a on b.aid = a.id where a.id = ?

有没有办法让它不关联A表,直接使用 from b where aid = ? 作为条件。

JPQL 生成的 SQL 倒是可以解决上面的问题,但是每个简单的查询都要写遍 JPQL 又太麻烦了。

@Query("select b from B b where b.a.id = :aid")
List<B> findByAId(Long aid)

生成的 SQL 是:

select * from b where aid = ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时常饿 2022-09-19 01:38:00

可以直接写啊,你这个查询里又没有来自 a 表的字段,直接用

select * from b where aid = ?

所谓外键,只是在 insert 和 update 时有限制,跟 select 无关的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文