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.
我有两个 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.