我有没有遇到休眠错误或做我有一个错误我没有看到:这个HQL查询有什么问题?
select enty.number from EntityAliasName enty
where enty.myId in
(
select cons.myId from Consens cons where cons.number in
(
select ord.number from Orders ord where ord.customer = :customer
and ord.creationDate <
(
select max(ord.creationDate) from Orders ord where ord.customer = :customer
)
)
)
我做什么得到的是以下几点:使用
org.hibernate.util.StringHelper.root(StringHelper.java:257)
Caused by: java.lang.NullPointerException
at org.hibernate.util.StringHelper.root(StringHelper.java:257)
at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1391)
at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:54)
at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1367)
at org.hibernate.hql.ast.tree.FromElement.getIdentityColumn(FromElement.java:320)
at org.hibernate.hql.ast.tree.IdentNode.resolveAsAlias(IdentNode.java:154)
at org.hibernate.hql.ast.tree.IdentNode.resolve(IdentNode.java:100)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:117)
at org.hibernate.hql.ast.tree.FromReferenceNode.resolve(FromReferenceNode.java:113)
at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:854)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.propertyRef(HqlSqlBaseWalker.java:1172)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.propertyRefLhs(HqlSqlBaseWalker.java:5167)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.propertyRef(HqlSqlBaseWalker.java:1133)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:1993)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:1932)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1476)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:580)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:288)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:231)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
at org.hibernate.impl.SessionFactoryImpl.checkNamedQueries(SessionFactoryImpl.java:484)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:394)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1341)
:休眠3.3.2.GA/PostgreSQL的
更新:
我试图通过尝试执行它自己的每个子条款来解决错误。我想通了,我刚好得到执行相同的异常:
select enty.number from EntityAliasName enty
,但如果我执行下面的工作原理:
select number from EntityAliasName enty
所以现在的问题,为什么呢?
也许我应该提到的是EntityAliasName
是通过定义的实体别名:
<class name="package.EntityName"
table="entities"
entity-name="EntityAliasName"
mutable="false"> ... </class>
更新2:
我找到了解决这一问题。我的POJO被映射是这样的:
<class name="package.EntityName"
table="entities"
entity-name="EntityAliasName"
mutable="false">
<composite-id>
<key-property name="val1" column="val1" type="long"/>
<key-property name="val2" column="val2" type="integer"/>
</composite-id>
<property name="id" column="entity_id" type="string" length="255" not-null="true"/>
...
</class>
有具有复合ID并使用名为id
属性时是一个问题:HHH-1851报道Anthony Patricio。指着我在正确的方向
感谢mdma:从id
到entityId
更改属性名解决的问题。
你用1或2个绑定参数调用它吗?它看起来像它想要2,但我不是一个休眠大师。 – MJB 2010-05-17 13:42:00
即使没有执行,在部署时,hibernate会从XML文件中分析静态定义的HQL,从而出现错误。 – ManBugra 2010-05-17 13:43:35
它们被命名为参数,所以我相信你只需要一个参数,因为它们都具有相同的名称。但可以肯定的是,您可以从查询和硬编码值中删除参数,仅用于测试。 – mdma 2010-05-17 13:48:10