Hibernate极联的灵异事件
我的user表与userinfo表实现了关联,下面是两张表的XML:
User:
<hibernate-mapping>
<class name="com.jiulong.oa.hibernate.po.User" table="user" >
<id name="userid" type="java.lang.String">
<column name="userid" length="20" />
<generator class="assigned"></generator>
</id>
<property name="password" type="java.lang.String">
<column name="password" length="20" not-null="true" />
</property>
<property name="popedomtier" type="java.lang.Integer">
<column name="popedomtier" not-null="true" />
</property>
<property name="passworddate" type="java.util.Date">
<column name="passworddate" length="10" not-null="true" />
</property>
<set name="userinfos" cascade="all" lazy="false" inverse="true">
<key>
<column name="userid" not-null="true" />
</key>
<one-to-many class="com.jiulong.oa.hibernate.po.Userinfo" />
</set>
</class>
</hibernate-mapping>
UserInfo:
<hibernate-mapping>
<class name="com.jiulong.oa.hibernate.po.Userinfo" table="userinfo" >
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment"></generator>
</id>
<property name="turename" type="java.lang.String">
<column name="turename" length="20" not-null="true" />
</property>
<property name="sex" type="java.lang.Integer">
<column name="sex" not-null="true" />
</property>
<property name="birthday" type="java.lang.String">
<column name="birthday" length="20" not-null="true" />
</property>
<property name="ship" type="java.lang.String">
<column name="ship" length="20" not-null="true" />
</property>
<property name="tel" type="java.lang.String">
<column name="tel" length="20" not-null="true" />
</property>
<property name="deptid" type="java.lang.Integer">
<column name="deptid" not-null="true" />
</property>
<property name="director" type="java.lang.String">
<column name="director" length="20" not-null="true" />
</property>
<property name="email" type="java.lang.String">
<column name="email" length="20" not-null="true" />
</property>
<property name="folder" type="java.lang.String">
<column name="folder" not-null="true" />
</property>
<many-to-one name="user" class="com.jiulong.oa.hibernate.po.User" cascade="all" fetch="select">
<column name="userid" not-null="true" unique="true" />
</many-to-one>
</class>
</hibernate-mapping>
两张表通过Userid进行关联,在Userinfo表中没有userid这个属性,userid的映射只存在与user对象中,我要通过userid对userinfo进行查询,在查询时出现了灵异事件
我的HQL本来应该写成
String hql = "FROM Userinfo WHERE user.userid = ?";
但
String hql = "FROM Userinfo as u WHERE u.user.userid = ?";
String hql = "FROM Userinfo WHERE userid = ?";
以上两种HQL的写法我能得到结果
反而
String hql = "FROM Userinfo WHERE user.userid = ?";抛出异常
Exception in thread "main" org.hibernate.QueryException: could not resolve property: userid of: com.jiulong.oa.hibernate.po.Userinfo [FROM com.jiulong.oa.hibernate.po.Userinfo WHERE user.userid = ?]
at org.hibernate.persister.entity.AbstractPropertyMapping.throwPropertyException(AbstractPropertyMapping.java:43)
at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:37)
at org.hibernate.persister.entity.BasicEntityPersister.toType(BasicEntityPersister.java:1094)
at org.hibernate.hql.ast.FromElementType.getPropertyType(FromElementType.java:273)
at org.hibernate.hql.ast.FromElement.getPropertyType(FromElement.java:349)
at org.hibernate.hql.ast.DotNode.getDataType(DotNode.java:474)
at org.hibernate.hql.ast.DotNode.prepareLhs(DotNode.java:208)
at org.hibernate.hql.ast.DotNode.resolve(DotNode.java:166)
at org.hibernate.hql.ast.FromReferenceNode.resolve(FromReferenceNode.java:87)
at org.hibernate.hql.ast.FromReferenceNode.resolve(FromReferenceNode.java:83)
at org.hibernate.hql.ast.HqlSqlWalker.resolve(HqlSqlWalker.java:463)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:863)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:3713)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:3190)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:1405)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:599)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:404)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:201)
at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:151)
at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:189)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:130)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:83)
at org.hibernate.impl.SessionFactoryImpl.getQuery(SessionFactoryImpl.java:427)
at org.hibernate.impl.SessionImpl.getQueries(SessionImpl.java:884)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:834)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
at com.jiulong.oa.hibernate.dao.impl.top.UserInfoDaoImpl.doSelect(UserInfoDaoImpl.java:24)
at com.jiulong.oa.logic.impl.top.UserInfoLogicImpl.main(UserInfoLogicImpl.java:25)
这到底是什么原因啊??我什么地方配置错了吗?