hibernateTemplate.delete() 删除相关的实体和 FK table

hibernateTemplate.delete() delete the proper entity and the FK in relationated table

我有两个 table:"Libros" 和 "Autores"。关系是多对多的。

当我从 Libros (HibernateTemplate.delete(libro)) 中删除条目时,此操作会删除中间 table "Libros_autores" 上的记录(这是正确的)。但是它在 Autores table 上删除了一条记录,这对我来说不合适。

在映射文件中将级联从 "all" 更改为 "save-update" 但它失败了,因为 table libros_autores 上有一个 id,它是来自 Libros 的 FK。所以,如果 Libros 记录被删除,libros_autores 中的行也必须被删除以避免约束问题(这对我来说是绝对合乎逻辑的)。

那么我的问题是:如果我在 table Libros 上删除记录,它也会在 table autores 上删除,我只想在 tables 上删除:Libros 和libros_autores.

映射文件是:

Libro.hbm.xml

<class name="app.modelo.Libro" table="libros">

        <id name="isbn" column="ISBN" type="string" length="20">
                 <generator class="assigned" />
        </id>
     <set name="autores" table="autores_libros" inverse="true" cascade="all,delete-orphan">
                <key column="ISBN"/>
                <many-to-many column="ID_AUTOR" class="app.modelo.Autor"/>
            </set>
</class>

Autor.hbm.xml

  <class name="app.modelo.Autor" table="autores">

        <id name="id" column="ID_AUTOR" type="integer" length="20">
            <generator class="native" />
        </id>
    <set name="libros" table="autores_libros" cascade="all">
        <key column="ID_AUTOR"/>
        <many-to-many column="ISBN" class="app.modelo.Libro"/>
    </set>
  </class>

我明白你不应该用户级联="all"。我认为这意味着它会像排除 libro 一样真正排除 autor。我知道关系无论如何都会被隐式删除。

从书中看到这个"Hibernate in Action":

We’ve chosen cascade="save-update" for both ends of the collection; this isn’t unreasonable. On the other hand, cascade="all", cascade="delete", and cas-cade="all-delete-orphans" aren’t meaningful for many-to-many associations, since an instance with potentially many parents shouldn’t be deleted when just one parent is deleted.