Hibernate SetParameter让我疯狂

时间:2011-03-11 16:03:31

标签: hibernate hql

这有效

hql = "from State where StateCode like 'T%'";
Query query = session.createQuery(hql);

这不是

hql = "from State where StateCode like :StateCode";
Query query = session.createQuery(hql);
query.setParameter("StateCode", "T%");

我明白了

1568 [main] DEBUG org.hibernate.hql.ast.ErrorCounter  - throwQueryException() : no errors
1596 [main] DEBUG org.hibernate.hql.antlr.HqlSqlBaseWalker  - select << begin [level=1, statement=select]
1608 [main] DEBUG org.hibernate.hql.ast.tree.FromElement  - FromClause{level=1} :  com.kencogroup.kkms.models.State (no alias) -> state0_
1610 [main] DEBUG org.hibernate.hql.ast.tree.FromReferenceNode  - Resolved :  {synthetic-alias} -> {synthetic-alias}
1611 [main] DEBUG org.hibernate.hql.ast.tree.DotNode  - getDataType() : StateCode -> org.hibernate.type.StringType@a39137
1611 [main] DEBUG org.hibernate.hql.ast.tree.FromReferenceNode  - Resolved :  {synthetic-alias}.StateCode -> state0_.StateCode
SELECT Exception: java.lang.reflect.UndeclaredThrowableException

请注意UndeclaredThrowableException例外。

我做错了什么?

如果有帮助,数据库是SQL Server 2008。但就像我说的,其他查询工作正常。

由于

2 个答案:

答案 0 :(得分:1)

如果您遵循标准命名约定,则应为stateCode,而不是StateCode。 试试

hql = "from State where stateCode like :myStateCode";
Query query = session.createQuery(hql);
query.setParameter("myStateCode", "T%");

答案 1 :(得分:0)

最后!

事实证明,Struts 1中的ANTLR版本与Hibernate的版本不同。完全混乱。