跟着李刚的《轻量级Java EE企业应用实战》的第10章做一个小例子,按照步骤下来老是出一个问题,错误提示如下:
2010-12-2 8:12:33 org.hibernate.property.BasicPropertyAccessor$BasicGetter get
严重: IllegalArgumentException in class: model.Employee, getter method of property: id
看内容错误应该是:传入了错误的参数类型,可是把各种配置文件检查了一遍,到底没有发现错误。最后决定从PO开始检查,到了Manager.java时突然发现,忘记了让它继承Employee类,原来错误在这里,真是崩溃啊,浪费我1天半的时间。呜呼!
对应的映射文件Employee.hbm.xml:
?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Hibernate映射文件的根元素 -->
<hibernate-mapping package="model">
<class name="Employee" table="emp_table">
<!-- 映射标识属性 -->
<id name="id" type="integer" column="emp_id">
<!-- 指定使用identity主键生成策略 -->
<generator class="identity"/>
</id>
<!-- 映射普通属性 -->
<property name="name" column="emp_name" type="string"
not-null="true" length="50" unique="true"/>
<property name="pass" column="emp_pass" type="string"
not-null="true" length="50"/>
<property name="salary" column="emp_salary" type="double"
not-null="true" />
<!-- 映射和Manager的关联关系 -->
<many-to-one name="manager" column="mgr_id"
class="Manager" lazy="false"/>
<!-- 映射和Attend之间的关联关系 -->
<set name="attends" inverse="true">
<key column="emp_id" />
<one-to-many class="Attend"/>
</set>
<!-- 映射和Payment之间的关联关系 -->
<set name="payments" inverse="true">
<key column="emp_id" />
<one-to-many class="Payment"/>
</set>
<!-- 映射Employee的子类Manager -->
<joined-subclass name="Manager" table="mgr_table">
<key column="mgr_id"/>
<!-- 映射Manager的普通属性 -->
<property name="dept" column="dept_name"
type="string" not-null="true" length="50"/>
<!-- 映射和Employee之间的关联关系 -->
<set name="employees" inverse="true">
<key column="mgr_id" />
<one-to-many class="Employee"/>
</set>
<!-- 映射和CheckBack之间的关联关系 -->
<set name="checks" inverse="true">
<key column="mgr_id" />
<one-to-many class="CheckBack"/>
</set>
</joined-subclass>
</class>
</hibernate-mapping>