Team.java 部分代码:
public class Team {
private Long id;
private String name;
private Set monkeys=new HashSet();
// 省略id,name的get与set代码
public Set getMonkeys(){
return monkeys;
}
public void setMonkeys(Set monkeys){
this.monkeys=monkeys;
}
}
Team.hbm.xml 部分代码:
<hibernate-mapping>
<class name="com.qiuclass.persistent.Team" table="TEAMS">
<id name="id" type="long" column="ID">
<generator class="increment" />
</id>
<property name="name" type="string" column="NAME" />
<set name="MONKEYS" inverse="true" lazy="true">
<key column="TEAM_ID" />
<one-to-many class="com.qiuclass.persistent.Monkey"/>
</set>
</class>
</hibernate-mapping>
当代码在编译到Configuration conf=new Configuration().configure("hibernate.cfg.xml")时,就报如下的错误:
org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister
...
Caused by: org.hibernate.HibernateException: Unable to instantiate default tuplizer [org.hibernate.tuple.entity.PojoEntityTuplizer]>
...
Caused by: java.lang.reflect.InvocationTargetException>
...
Caused by: org.hibernate.PropertyNotFoundException: Could not find a getter for MONKEYS in class com.qiuclass.persistent.Team
...
在最后的提示Could not find a getter for MONKEYS in class com.qiuclass.persistent.Team,错误是Team类里找不到MONKEYS的getter方法,在反复检查后才知道映射文件Team.hbm.xml里<set name="MONKEYS" ... >的MONKEYS与类文件Team.java里的名字不符,应该改为monkeys,这样在编译的时候才能找到getMonkeys方法。
当初还以为name="MONKEYS"是指数据库里表名字,概念没搞清楚,导致耗费了时间。
以此记录,避免再出现这错误。