java - 使用继承时存储 'employee code' 的公共(public)值

标签 java mysql hibernate jakarta-ee inheritance

有 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_codeemp_master 的主键它是 hr 的外键和personal表。

我构建了 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 的三个表中的条目。 。我该怎么做呢 ?

最佳答案

您的 hibernate 映射建议您 EmployeeMasterHRpersonal 形成一个层次结构,即 EmployeeMaster 是父级类,而 HRPersonal 是子类。

您想要实现的目标以及您的映射建议的内容存在问题。在上面的映射中,ID 可以映射到 HRPersonal,但不能同时映射到两者。

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

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

public class EmployeeMaster {}

public class HR extends EmployeeMaster{}

public class Personal extends EmployeeMaster{}

现在,您必须考虑如何将您的要求融入到上述模型中。如果情况并非如此,那么您别无选择,只能更改模型(以及 xml 映射)

关于java - 使用继承时存储 'employee code' 的公共(public)值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17037279/

相关文章:

java - 从文件读取时出错

TCP 服务器上的 java.lang.ClassNotFoundException

mysql - 如何在不使用限制的情况下在MySql中找到前5名薪水

MySQL 不使用索引;使用文件排序

java - 使用 javafx 将子窗口面板放入 Canvas 场景中

java - 在 JAVA 中应该使用哪种数组类型,为什么?

php - WordPress 未在本地环境中运行,为 Google 应用引擎开发

java - 检查表然后保存/更新 Hibernate 的正确做法

java - Spring MVC + hibernate : How to handle form with relation

java - 带注释的 Spring + Hibernate : how to bind Hibernate Session to thread?