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

时间:2014-06-16 07:10:26

标签: java database hibernate

我从数据库A获取数据并通过hibernate将其传递给数据库B,我想要做的是 CERTIFICATE 的记录在 将被删除 dbB

例如,在 dbB 中,"A""B"employeeId=1"A",再次更新时,"C"添加了> dbA 和一个新的"B" and "C",因此在 dbB 中,只有在保存更新后才应为证书String hqlDeleteCertificates = "delete Certificates where employeeId= :employeeId"; Query query = session.createQuery(hqlDeleteCertificates ); query.setInteger("employeeId", employeeId); query.executeUpdate();

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

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>

Hibernate映射

{{1}}

1 个答案:

答案 0 :(得分:0)

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

来自文档:

在保存对象之前调用

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

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