假设我有两个实体,Post
和Comment
(在ColdFusion中):
component persistent="true" table="post"
{
property name="Id" fieldtype="id";
property name="Comments" fieldtype="one-to-many" cfc="Comment" fkcolumn="post_id" cascade="all";
}
component persistent="true" table="comment"
{
property name="Id" fieldtype="id";
property name="Post" fieldtype="many-to-one" cfc="Post" column="post_id";
}
Post
有一个Comments
的集合。现在,我想删除Post
,并自动删除Comments
。我尝试了直截了当的方法:
var post = EntityLoadByPK("Post", 13);
EntityDelete(post);
但是我收到一个Hibernate错误,指出post_id
不能设置为null。我做错了什么,我该如何解决这个问题?
答案 0 :(得分:2)
您需要调整映射。尝试使注释的Post属性不为null,并将post的Comments属性标记为反向。
component persistent="true" table="post"
{
property name="Id" fieldtype="id";
property name="Comments" fieldtype="one-to-many" cfc="Comment" fkcolumn="post_id" cascade="all" inverse="true";
}
component persistent="true" table="comment"
{
property name="Id" fieldtype="id";
property name="Post" fieldtype="many-to-one" cfc="Post" column="post_id" notnull="true";
}
答案 1 :(得分:1)
你必须在你的数据库中将注释表中的post_id设为可空。这就是hibernate如何级联删除。它会将post_id = 13的所有注释设置为null,然后删除post_id为空的所有注释