Java 如果记录不再存在于其他数据库中,则删除该记录

Java 如果记录不再存在于其他数据库中,则删除该记录,java,database,hibernate,Java,Database,Hibernate,我从数据库A获取数据并通过hibernate将其传递给数据库B,我要做的是当表证书的记录在dbA中不再存在时,在更新时在dbB中删除 例如,在dbB中,我有employeeId=1的证书“A”和“B”,当再次更新证书“A”在dbA中被删除,并添加了一个新的“C”,因此在dbB中应仅为证书“B”和“C”,保存更新后 现在,在更新EMPLOYEE和CERTIFICATE表之前,我要做的是删除employeeId=x的所有证书 String hqlDeleteCertificates = "delet

我从数据库A获取数据并通过hibernate将其传递给数据库B,我要做的是当表证书的记录在dbA中不再存在时,在更新时在dbB中删除

例如,在dbB中,我有
employeeId=1
的证书
“A”
“B”
,当再次更新证书
“A”
dbA中被删除,并添加了一个新的
“C”
,因此在dbB中应仅为证书
“B”和“C”
,保存更新后

现在,在更新EMPLOYEE和CERTIFICATE表之前,我要做的是删除employeeId=x的所有证书

String hqlDeleteCertificates = "delete Certificates where employeeId= :employeeId";
Query query = session.createQuery(hqlDeleteCertificates );
query.setInteger("employeeId", employeeId);
query.executeUpdate();
在保存更新、更改映射配置时,是否有更好的方法在一个事务中执行此操作

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>

雇员(续)
证书

查看
org.hibernate.classic.Lifecycle
界面及其方法。通过您的POJO之一实现此接口

从文件中:

onSave:在保存对象之前调用
onUpdate:在对象更新之前调用,即调用Session.update()时
onDelete:在删除对象之前调用
onLoad:在加载对象后立即调用

在那里,您可以将代码挂接到
onUpdate
中,而不再关心它