如何使工作 SQL 查询成为 spring 数据中的本机查询
How to make a working SQL query a native query in spring data
我创建了一个 SQL 查询:
SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = 'poor')
AND NOT EXISTS
(SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)
查询正常,我得到了想要的结果;但是,我现在正尝试在我的 spring 数据应用程序中使用此工作查询作为本机查询,使用 @Query
注释。
@Query(value = "SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = ?0) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);
我复制了完全相同的查询并将其放在我的存储库中(如上所示)但是该值绑定为 NULL,并且没有显示任何记录。是否缺少使此查询适用于我的 spring 应用程序的步骤?
尝试将您的查询更改为:
@Query(值="SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = :stuff3) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
列出 findByStuff3(@Param("stuff3") String stuff3);
通过进一步研究,我能够解决我遇到的问题。我在我的存储库中使用的本机查询确实有效,代码中有一个简单的错误,而不是 0
,我用 1
替换了它并且效果很好!
旧版本:
@Query(value = "SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = ?0) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);
修改版本:
@Query(value = "SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = ?1) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);
我还遇到了另一种方法,使用 JPQL 也同样有效 我能够在我的 spring 应用程序中查询 运行 :
@Query(value = "SELECT t1.ORDER_NUM, t1.STUFF2, t1.STUFF3 FROM table1 t1 WHERE (t1.STUFF3 = ?0) AND NOT EXISTS (SELECT t2.ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);
我创建了一个 SQL 查询:
SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = 'poor')
AND NOT EXISTS
(SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)
查询正常,我得到了想要的结果;但是,我现在正尝试在我的 spring 数据应用程序中使用此工作查询作为本机查询,使用 @Query
注释。
@Query(value = "SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = ?0) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);
我复制了完全相同的查询并将其放在我的存储库中(如上所示)但是该值绑定为 NULL,并且没有显示任何记录。是否缺少使此查询适用于我的 spring 应用程序的步骤?
尝试将您的查询更改为:
@Query(值="SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = :stuff3) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true) 列出 findByStuff3(@Param("stuff3") String stuff3);
通过进一步研究,我能够解决我遇到的问题。我在我的存储库中使用的本机查询确实有效,代码中有一个简单的错误,而不是 0
,我用 1
替换了它并且效果很好!
旧版本:
@Query(value = "SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = ?0) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);
修改版本:
@Query(value = "SELECT ORDER_NUM, STUFF2, STUFF3 FROM table1 t1 WHERE (STUFF3 = ?1) AND NOT EXISTS (SELECT ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);
我还遇到了另一种方法,使用 JPQL 也同样有效 我能够在我的 spring 应用程序中查询 运行 :
@Query(value = "SELECT t1.ORDER_NUM, t1.STUFF2, t1.STUFF3 FROM table1 t1 WHERE (t1.STUFF3 = ?0) AND NOT EXISTS (SELECT t2.ORDER_NUM FROM table2 t2 WHERE t1.ORDER_NUM = t2.ORDER_NUM)", nativeQuery = true)
List<eOrder> findByStuff3(String stuff3);