Hibernate的关联继承(一个令人崩溃的bug)

在学习Hibernate关联继承时,遇到一个导致程序崩溃的错误。经过排查,问题出在Manager.java类未正确继承Employee类。修复此错误后,程序正常运行。博客详细介绍了错误现象、排查过程以及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     跟着李刚的《轻量级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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值