我有沒有遇到休眠錯誤或做我有一個錯誤我沒有看到:這個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