Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除所有以前的记录并插入新记录_Java_Hibernate - Fatal编程技术网

Java 删除所有以前的记录并插入新记录

Java 删除所有以前的记录并插入新记录,java,hibernate,Java,Hibernate,例如,当更新id为1的员工时,删除该员工id的表证书中以前的所有记录并插入新记录的最佳方法是什么?。 例如,员工id=1具有A、B证书,更新员工时,请删除此员工的所有证书,并再次插入,即使证书是A、B或新的证书C、D create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL,

例如,当更新id为1的员工时,删除该员工id的表证书中以前的所有记录并插入新记录的最佳方法是什么?。 例如,员工id=1具有A、B证书,更新员工时,请删除此员工的所有证书,并再次插入,即使证书是A、B或新的证书C、D

create table EMPLOYEE (
   id INT NOT NULL auto_increment,
   first_name VARCHAR(20) default NULL,
   last_name  VARCHAR(20) default NULL,
   salary     INT  default NULL,
   PRIMARY KEY (id)
);

create table CERTIFICATE (
   id INT NOT NULL auto_increment,
   certificate_name VARCHAR(30) default NULL,
   employee_id INT default NULL,
   PRIMARY KEY (id)
);
休眠映射

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD//EN"
 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping>
   <class name="Employee" table="EMPLOYEE">
      <id name="id" type="int" column="id">
        <generator class="sequence">
            <param name="sequence">employee_seq</param>
        </generator>
      </id>
      <set name="certificates" lazy="false" cascade="all">
         <key column="employee_id" not-null="true"/>
         <one-to-many class="Certificate"/>
      </set>
      <property name="firstName" column="first_name"/>
      <property name="lastName" column="last_name"/>
      <property name="salary" column="salary"/>
   </class>

   <class name="Certificate" table="CERTIFICATE">
      <id name="id" type="int" column="id">
         <param name="sequence">certificate_seq</param>
      </id>
      <property name="employee_id" column="employee_id" insert="false" update="false"/>
      <property name="name" column="certificate_name"/>
   </class>

</hibernate-mapping>

雇员(续)
证书
您应该在映射中使用,以便自动删除相关记录。 这将删除所有具有
员工
外键的
证书

<class name="Certificate" table="CERTIFICATE" cascade="delete-orphan, save-update" >
  <id name="id" type="int" column="id">
     <param name="sequence">certificate_seq</param>
  </id>

  <property name="name" column="certificate_name"/>

  <key>
    <property name="employee_id" column="employee_id" insert="false" update="false" not-null="true"/>
  </key>
  <one-to-many class="com.your.package.Certificate" />

</class>

证书
现在,您可以在
employee
类中修改
certificates
集合。通过执行
employee.saveOrUpdate
操作,您的证书将相应地被保存/删除

我还没有测试过这个。但是你应该明白。
是级联类型的一个示例。

创建触发器以在发送员工更新时从证书中删除行我将其添加到类证书中,并收到此错误。必须为元素类型“class”声明属性“cascade”。