我有两张桌子:“Libros”和“Autores”。这种关系是多对多的。
当我从Libros中删除一个条目(HibernateTemplate.delete(libro))时,此操作删除中间表“Libros_autores”(右侧)上的记录。但它在Autores表上删除了一条不适合我的记录。
在映射文件中将级联从“all”更改为“save-update”但是它失败了,因为表libros_autores上有一个来自Libros的FK的id。因此,如果删除了Libros记录,则必须删除libros_autores中的行以避免约束问题(这对我来说绝对是逻辑)。
然后我的问题是:如果我删除表Libros上的记录,它也会删除表autores上的记录,我只想删除表: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>
答案 0 :(得分:0)
我知道你不应该使用cascade =&#34; all&#34;。我认为这意味着当你排除libro时它会真正排除autor。我理解这种关系无论如何都会被删除。
请参阅书中的#34; Hibernate in Action&#34;:
我们选择了cascade =&#34; save-update&#34;对于集合的两端;这不是不合理的。另一方面,cascade =&#34; all&#34;,cascade =&#34; delete&#34;和cas-cade =&#34; all-delete-orphans&#34;对于多对多关联没有意义,因为当只删除一个父对象时,不应删除具有可能多个父对象的实例。