我们对数据库有两个查询,唯一的区别是OR子句中条件的顺序.
相同结构的查询在另一个数据库上的类似数据集上工作正常.我们正在合作Oracle 12.2.
该Bestand表有两个连接的实体,其中任何一个总是被填充.在我们的例子中,文章KbArticle始终是连接的null.在我们的一个查询中,我们得到了文章id适用的所有结果,而在另一种情况下我们没有.所有Bestand实体都满足最后两个条件(cod_lbr = 12, flg_sperre = 0)
SELECT bestand0_.*
FROM tbl_bestand bestand0_
LEFT OUTER JOIN tbl_kb_artikel customeror1_
ON bestand0_.id_kb_artikel=customeror1_.id_kb_artikel
LEFT OUTER JOIN tbl_artikel article2_
ON bestand0_.id_artikel =article2_.id_artikel
WHERE (customeror1_.id_kb_artikel=3017874 OR article2_.id_artikel =3017874)
AND bestand0_.cod_lbr =12
AND NVL(bestand0_.flg_sperre,0) = 0;
Run Code Online (Sandbox Code Playgroud)
产生结果 链接到解释计划
SELECT bestand0_.*
FROM tbl_bestand bestand0_
LEFT OUTER JOIN tbl_kb_artikel customeror1_
ON bestand0_.id_kb_artikel=customeror1_.id_kb_artikel
LEFT OUTER JOIN tbl_artikel article2_
ON bestand0_.id_artikel =article2_.id_artikel
WHERE (article2_.id_artikel =3017874 OR customeror1_.id_kb_artikel=3017874)
AND …Run Code Online (Sandbox Code Playgroud) 从1.5.13升级到2.0.2的Spring Boot升级后,我们的某些HQL查询失败,并显示“ Parameter [myParameter] not bound”。在这两种情况下,我们都使用了Hibernate 5.2.12。
仔细查看后,我发现所有失败的查询都在比较的左侧使用了命名参数。
所以
@Query("select a from MyEntity a where :name = a.name")
List<MyEntity> findByName (@Param("name") String name);
在Spring Boot 1.5.13上工作,但在Spring Boot 2.0.2上失败了,但是
@Query("select a from MyEntity a where a.name = :name")
List<MyEntity> findByName (@Param("name") String name);
都在工作。
有人可以解释这种行为吗?我在文档中找不到解释。
我得到的完整Stacktrace是:
[2018-06-19 23:06:21.934] ERROR [http-nio-8080-exec-2] [] [] --- o.a.c.c.C.[.[.[.[dispatcherServlet]: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: Named parameter [codLbrX] not set; nested exception is org.hibernate.QueryException: …Run Code Online (Sandbox Code Playgroud)