现有一个类别表web_reforger_kind,字段分别为id,superId,name
id为类别主键,name为类别名称,superId为上级类别(如果superId为0,表示顶级类别,否则上级类别为id等于superId的类别)现查询不是终极类别(不是最后一级类别,即:有子类别的类别)的所有类别:
HQL:
select a from WebReforgerKind a left join cn.reforger.reforgerKind.WebReforgerKind b where a.superId=b.id and b.superId=0 order by a.superId,idWebReforgerKind.hbm.xml<hibernate-mapping>
<class name="reforgerKind.WebReforgerKind" table="web_reforger_kind" catalog="reforger" lazy="false">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="superId" type="java.lang.Integer">
<column name="superID" not-null="true" />
</property>
<property name="name" type="java.lang.String">
<column name="name" length="40" not-null="true" />
</property>
<many-to-one name="id" class="reforgerKind.WebReforgerKind" not-null="false" insert="false" update="false">
<column name="superId" />
</many-to-one>
</class>
</hibernate-mapping>出现如下错误信息:
java.lang.NullPointerException
at org.hibernate.hql.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:332)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3275)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3067)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
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.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
请问是我的HQL错误?还是配置有问题?
id为类别主键,name为类别名称,superId为上级类别(如果superId为0,表示顶级类别,否则上级类别为id等于superId的类别)现查询不是终极类别(不是最后一级类别,即:有子类别的类别)的所有类别:
HQL:
select a from WebReforgerKind a left join cn.reforger.reforgerKind.WebReforgerKind b where a.superId=b.id and b.superId=0 order by a.superId,idWebReforgerKind.hbm.xml<hibernate-mapping>
<class name="reforgerKind.WebReforgerKind" table="web_reforger_kind" catalog="reforger" lazy="false">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<property name="superId" type="java.lang.Integer">
<column name="superID" not-null="true" />
</property>
<property name="name" type="java.lang.String">
<column name="name" length="40" not-null="true" />
</property>
<many-to-one name="id" class="reforgerKind.WebReforgerKind" not-null="false" insert="false" update="false">
<column name="superId" />
</many-to-one>
</class>
</hibernate-mapping>出现如下错误信息:
java.lang.NullPointerException
at org.hibernate.hql.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:332)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.joinElement(HqlSqlBaseWalker.java:3275)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3067)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:251)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:134)
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.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1650)
请问是我的HQL错误?还是配置有问题?
public class WebReforgerKind{
private WebReforgerKind parent;
private Set subWebReforgerKinds;
......
}
hbm.xml文件如下:
<many-to-one name="parent" class="xxx.WebReforgerKind" cascade="none" column="superId"/>
<set name="children" lazy="false" inverse="true">
<key column="superId"></key>
<one-to-many class="xxx.WebReforgerKind"/>
</set>
可以设置lazy="false",也可以用fetch来查询
from WebReforgerKind a left join fetch a.subWebReforgerKinds ......
可以拿我的表做示例说明一下吗?你写的WebReforgerKind类看不太懂
private WebReforgerKind parent;//自关联的父亲多对1
private Set subWebReforgerKinds;//孩子一对多