错误信息:
org.hibernate.QueryException: could not resolve property: qid of: org.lxh.myzngt.vo.Answer
[SELECT COUNT(q.qid) FROM org.lxh.myzngt.vo.Question AS q WHERE q.qid IN (SELECT a.qid FROM org.lxh.myzngt.vo.Answer AS a WHERE a.userid=?)]
解决方法:初看之下以为是Action出错,读取不出总记录数allRecorders。后来又以为是sql语句错误,但是检查过了是没有错的。
最后发现是错在映射文件Answer.hbm.xml中;
原映射文件如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse - Hibernate Tools
-->
<hibernate-mapping>
<class name="org.lxh.myzngt.vo.Answer" table="answer">
<id name="aid" type="java.lang.Integer">
<column name="aid" />
<generator class="native" />
</id>
<many-to-one name="question" class="org.lxh.myzngt.vo.Question"
fetch="select">
<column name="qid" />
</many-to-one>
<property name="quesans" type="java.lang.String">
<column name="quesans" length="50" />
</property>
<property name="userid" type="java.lang.String">
<column name="userid" length="50" />
</property>
<property name="grade" type="java.lang.String">
<column name="grade" length="50" />
</property>
<property name="anstime" type="java.util.Date">
<column name="anstime" length="19" />
</property>
<property name="status" type="java.lang.Integer">
<column name="status" />
</property>
</class>
</hibernate-mapping>
后来只需要再加多一个属性
<property name="qid" type="java.lang.Integer">
<column name="qid" />
</property>
即可解决。
中间会出现如下错误:
org.hibernate.MappingException: Repeated column in mapping for entity: org.lxh.myzngt.vo.Answer column: qid (should be mapped with insert="false" update="false")
只需根据错误提示在fetch="select" 前面加上insert="false" update="false"就一切OK啦。
纠结了好久的。。。。