这有效
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。但就像我说的,其他查询工作正常。
由于
答案 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的版本不同。完全混乱。