Как каскадно удалить коллекцию в Hibernate? - PullRequest
4 голосов
/ 23 сентября 2011

Допустим, у меня есть две сущности: 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 не может быть установлено в ноль.Что я делаю не так, и как я могу исправить эту проблему?

Ответы [ 2 ]

2 голосов
/ 23 сентября 2011

Вы должны настроить ваши отображения.Попробуйте сделать свойство 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 голос
/ 23 сентября 2011

Вам нужно сделать post_id в таблице комментариев равным Nullable в вашей БД.Вот как hibernate делает каскадное удаление.Он установит все комментарии с post_id = 13 как ноль, а затем удалит все комментарии, где post_id IS NULL

...