で双方向の関係なしに削除されます。カスケードは、私はGrailsの1.3.7を使用して、以下のドメインクラスを持っていますGrailsの
package com.fxpal.test
class UserGroup {
String name
static constraints = {
name(blank: false)
}
}
class Invitation {
UserGroup group
String user
static belongsTo = [group: UserGroup]
static constraints = {
group(nullable: false)
}
}
私はのUserGroupインスタンスを参照するすべての招待インスタンスを削除できるようにしたいと思いますそのUserGroupインスタンスは削除され、UserGroupのInvitationを参照する明示的な関係はありません。言い換えれば、グループを変更せずに、UserGroupからInvitationにカスケード削除をしたいと思います。このため
私のテストが原因招待を表し制約に失敗した - >のUserGroupの関係:私はテストを実行すると
void testCascadingDelete() {
UserGroup group1 = new UserGroup(name: 'group1').save(flush: true, failOnError: true)
UserGroup group2 = new UserGroup(name: 'group2').save(flush: true, failOnError: true)
Invitation invitation = new Invitation(user:'user1', group: group1).save(flush: true, failOnError: true)
assertEquals("Wrong number of groups.", 2, UserGroup.count())
assertEquals("Wrong number of invitations.", 1, Invitation.count())
group1.delete(flush: true, failOnError: true)
assertEquals("Wrong number of groups.", 1, UserGroup.count())
assertEquals("Wrong number of invitations.", 0, Invitation.count())
}
、それは次のように失敗します。
could not delete: [com.fxpal.test.UserGroup#1]; SQL [delete from user_group where id=? and version=?]; constraint [FK473F7799A8642225]; nested exception is org.hibernate.exception.ConstraintViolationException: could not delete: [com.fxpal.test.UserGroup#1]
org.springframework.dao.DataIntegrityViolationException: could not delete: [com.fxpal.test.UserGroup#1]; SQL [delete from user_group where id=? and version=?]; constraint [FK473F7799A8642225]; nested exception is org.hibernate.exception.ConstraintViolationException: could not delete: [com.fxpal.test.UserGroup#1]
at com.fxpal.test.InvitationIntegrationTests.testCascadingDelete(InvitationIntegrationTests.groovy:23)
Caused by: org.hibernate.exception.ConstraintViolationException: could not delete: [com.fxpal.test.UserGroup#1]
at com.fxpal.test.InvitationIntegrationTests.testCascadingDelete(InvitationIntegrationTests.groovy:23)
...
それはのように思えます正規の鼻顔の例ですが、カスケード削除は機能していないようです。私は本当にUserGroupのInvitationを表現する必要はありません。特に、最終的にInvitationはいくつかの他のドメインクラスを参照するため、削除すると対応するInvitationも削除されるはずです。
私には何が欠けていますか?
遺伝子
ありがとう! Invitationがそのコンテキスト(例えば、招待状を発行しているユーザー)として使用する可能性のある他のすべてのクラスに対して、そのようなメソッドが存在することを確認する必要があるので、私はdeleteGroup()スタイルのソリューションを避けることを望んでいました。しかたがない。 –
'belongsTo'のプロパティを複製するまでは、意図的にSpringSource Tool Suite(Eclipse)がクラス内のプロパティを認識して構文補助を行うことを許可しました。 –
私はより軽量なオプションで答えを更新しました。それでもなお余分なコードが必要ですが、ドメインクラスに含まれています。 –