【发布时间】:2016-08-10 10:23:54
【问题描述】:
members.hbm.xml有如下映射:
<set name="licenses">
<key column="member_id"/>
<one-to-many class="com.model.License"/>
</set>
<set name="sessions">
<key column="member_id"/>
<one-to-many class="com.model.Session"/>
</set>
session.hbm.xml 有:
<many-to-one class="com.model.Member" name="member">
<column name="member_id" not-null="true"/>
</many-to-one>
license.hbm.xml 有:
<many-to-one name="member" column="member_id"
class="com.model.Member"/>
试图在成员表中执行删除:
session.delete(member);
它抛出一个异常。
休眠:更新许可证集 member_id=null where member_id=? org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logExceptions 列 'member_id' 不能为空
我也尝试使用cascade="delete-orphan"。但它不起作用。
理想情况下,我希望在删除成员表中的特定记录时删除许可证和会话表中的记录。我怎样才能做到这一点?
【问题讨论】:
-
尝试级联删除? (不是删除孤儿)
-
刚刚试过。同样的例外。
-
我对您的实体的外观有点困惑(抱歉,我更习惯于基于注释的映射)。你有
Member 1<-->* License对吗?当我们有双向关系时,我们通常使用“mappedBy”(类似于inverse=truefor hbm.xml)的“one”端,并在one端设置级联。这是我从您的代码中看不到的东西,您的异常向我表明级联不适用于您的情况。 -
如果我们有一个双向的一对多关系并且“一”方拥有该关系(这似乎是在你的情况下)。在大多数情况下,这不是可取的映射。
标签: hibernate