0

有3个,pojoEmployeeMaster (父类)HrPersonal EmployeeMaster的子类)

然后我有 3 个单独的表,每个表pojo构造为:

create table emp_master(emp_code integer,emp_name text,emp_desig text,
emp_dept text,primary key(emp_code));

create table hr(emp_code integer,salary integer,hra integer,da integer,
taxes integer,grade text,foreign key(emp_code) references emp_master(emp_code));

create table personal(emp_code integer,address text,married bool,
foreign key(emp_code) references emp_master(emp_code));

emp_code是主键,也是表和表emp_master的外键。hrpersonal

我构建了 3 个单独jsp的表格来接收数据。

以下是hibernate mapping文件:

<hibernate-mapping>
  <class name="pojo.EmployeeMaster" table="emp_master">
      <id name="emp_code">
          <generator class="assigned" />
      </id>
      <property name="emp_dept" />
      <property name="emp_desig" />
      <property name="emp_name" />

      <joined-subclass name="pojo.Hr" table="hr">
          <key column="emp_code" />
          <property name="da" />
          <property name="grade" />
          <property name="hra" />
          <property name="salary" />
          <property name="taxes" />
      </joined-subclass>

      <joined-subclass name="pojo.Personal" table="personal">
          <key column="emp_code" />
          <property name="address" />
          <property name="married" />
      </joined-subclass>

  </class>
</hibernate-mapping>

现在的问题是,我不想要任何null行并且想将相同的数据提交emp_code到其他表中,即hrpersonal

但是当我尝试将数据提交到hr表中emp_code 101时,master table我收到一条错误消息Duplicate entry '101' for key 'PRIMARY'

如果我generator class to increment在映射 xml 中更改,我会得到一行空值,用于从子类插入的数据。我想要的是三个表中的条目相同employee code。我该怎么做呢 ?

4

1 回答 1

0

您的休眠映射表明您EmployeeMaster,HRpersonal形成一个层次结构,即EmployeeMaster是父类,而HRPersonal是子类。

您想要实现的目标和映射建议的内容有问题。在上面的映射中,anID可以映射到一个HR或两个,Personal而不是两个。

您应该考虑将映射从INHERITANCE更改为ASSOCIATION

根据您的映射 xml,您的 java 类应定义如下:

public class EmployeeMaster {}

public class HR extends EmployeeMaster{}

public class Personal extends EmployeeMaster{}

现在,您必须确定如何将您的要求适应上述模型。如果不是这种情况,那么您别无选择,只能更改模型(xml 映射也是如此)

于 2013-06-11T05:56:47.107 回答