微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将Postgres查询转换为JPQL

如何解决将Postgres查询转换为JPQL

我在Postgres中有以下查询

SELECT *
from table1
         LEFT OUTER JOIN table1.table2 ON table1.latest_id = table2.id
WHERE table1.table2.status = 0
  AND table1.id NOT IN (
    (SELECT id from table3 where userId = table2.user))

我不具备连接table1和table3的能力,并且无法以JPA可以理解的格式编写子查询-使用Spring Boot应用程序。这是到目前为止我的存储库类中的位置:

  @Query("SELECT c FROM #{#entityName} c JOIN FETCH c.table2 WHERE c.table2.status = 0")
  fun findByIdAndStatus(id: String): MyEntity

我尝试如下进行子查询,但是没有喜悦-存在明显的语法错误,我无法解决问题:

    @Query("SELECT c FROM #{#entityName} c JOIN FETCH c.table2 WHERE c.table2.status = 0" AND c.id NOT IN (" +
"SELECT * FROM Table3 WHERE userId = c.table2.user")
    

你能帮忙吗?

谢谢

解决方法

假设:

  • 您的SQL查询不使用任何输入参数
  • table1被MyEntity映射,而table3被Table3实体
  • 映射 使用MyEntity连接列在latest_id中映射与table2关联的
  • 实体
  • 状态映射为数字(即Long / Integer)

您可以将查询重写为以下JPQL格式:

    @Query("SELECT t1 FROM MyEntity t1 "
            + "JOIN t1.table2 t2 "
            + "WHERE t2.status = 0 AND t1.id NOT IN ("
            + "       SELECT t3.id from Table3 t3 "
            + "       WHERE t3.userId = t2.user "
            + ")")
    List<MyEntity> findMyEntities();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。