我一直在尝试编写一个hibernate查询并且能够通过服务器生成hibernate查询,但是参数化查询中的参数没有正确绑定,即如果23要绑定到参数1,但是& #39;被绑定到参数3。
知道为什么会这样吗?为了解决这个问题的根本原因,我应该检查哪些错误点?
编辑(为什么查询不在这里?)
hibernate查询很复杂,我不可能在这里发布它。这就是为什么我的问题是一般的问题。我只是想知道,如果其他人也遇到过这个问题,其中hibernate没有抛出任何错误并且查询生成成功,但它将不正确的数据绑定到不正确的参数。
我将尝试通过一个例子给出一个粗略的想法 - > 你写的是:
criteria.createAlias("D.A", "a", CriteriaSpecification.LEFT_JOIN, Restrictions.eq("a.delIndc", false));
criteria.createAlias("A.B", "ab", CriteriaSpecification.LEFT_JOIN,
Restrictions.sqlRestriction("sqlQuery"));
criteria.createAlias("ab.c", "abc", CriteriaSpecification.LEFT_JOIN, Restrictions.eq("c.dataEntry", "Star Wars"));
criteria.createAlias("abc.f", "f", CriteriaSpecification.LEFT_JOIN, Restrictions.eq("f.dataExit", "Star Trek"));
查询在服务器中成功生成(没有抛出错误),但在进行参数绑定时:
2017-12-09 12:09:21,396 TRACE [org.hibernate.jdbc.AbstractBatcher] (pool-14-thread-2) preparing statement
2017-12-09 12:09:21,396 TRACE [org.hibernate.type.BooleanType] (pool-14-thread-2) binding 'false' to parameter: 1
2017-12-09 12:09:21,396 TRACE [org.hibernate.type.BooleanType] (pool-14-thread-2) binding 'Star Trek' to parameter: 2
2017-12-09 12:09:21,396 TRACE [org.hibernate.type.BooleanType] (pool-14-thread-2) binding 'Star Wars' to parameter: 3
所以,而不是绑定星球大战'到参数2,它不正确地绑定到参数3。
所以,简而言之,我想知道为什么会发生这种情况?为了找到根本原因,我需要做些什么检查?如果你遇到这个问题,你是如何找到问题的,以及你如何解决它?
希望这能进一步澄清我的疑问。如果您在这方面需要更多信息,请帮助并告诉我。
答案 0 :(得分:0)
您可以使用2种方法绑定Hibernate中的参数 - 位置参数,命名参数。
说你有查询:
select name from Emp where id=? and age=?
此处0位置的参数代表id
,1位置的参数代表age
。这里的参数顺序很重要。
select name from Emp where id=:ID and age=:AGE
在这里,您可以使用名称ID
和AGE
来设置参数,在这种情况下,顺序并不重要,因为您指的是使用名称而不是使用其位置的参数。
答案 1 :(得分:0)
提供您想要在查询中传递的代码和值。您可能有可能修改了pojo / model类中的属性名称