Hibernate查询参数绑定不正确

时间:2017-12-11 10:23:33

标签: java hibernate parameterized-query

我一直在尝试编写一个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。

所以,简而言之,我想知道为什么会发生这种情况?为了找到根本原因,我需要做些什么检查?如果你遇到这个问题,你是如何找到问题的,以及你如何解决它?

希望这能进一步澄清我的疑问。如果您在这方面需要更多信息,请帮助并告诉我。

2 个答案:

答案 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

在这里,您可以使用名称IDAGE来设置参数,在这种情况下,顺序并不重要,因为您指的是使用名称而不是使用其位置的参数。

答案 1 :(得分:0)

提供您想要在查询中传递的代码和值。您可能有可能修改了pojo / model类中的属性名称