2012-02-06 8 views
3

を削除します。Grailsのカスケードは、私は1を持っている私のGrailsのドメインで

Artist.executeUpdate("delete Artist a where a.id = ?", [artistId]) 

エラーメッセージは次のとおりです:

Class 
    com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException 
Message 
    Cannot delete or update a parent row: a foreign key constraint fails 
    (`festival2`.`musician_details`, CONSTRAINT `FKA0E6B2145ACE528E` 
    FOREIGN KEY (`artist_id`) REFERENCES `artist` (`id`)) 

1に定義するための正しい方法は何ですか:Artistと1の間の関係は、しかし、私はとArtistを削除すると、外部キーcontraint違反を取得しますMusicianDetailsそのような前者のカスケードの削除は?

答えて

0

MusicianDetailsにbelongsToが必要です。わかりませんが、孤立しているすべてのファイルをカスケードする必要があるかもしれません。

とにかく、ミュージシャンの詳細がアーティストの組み込みクラスであるように見えるので、1つのデータベーステーブルにマッピングされます。

http://bartling.blogspot.com/2009/04/embedded-domain-components-in-grails.html?m=1

もう一つは、代わりにHQLクエリを実行するのでArtist.get(ARTISTID).delete()を行うために優れていること、です。これにより、コードがエラーを起こしにくくなり、理解しやすくなります。何らかの理由でHibernateを取り除きたい場合は、GORMを別の実装に変更することができます。

1

私はHQLの更新が/データベース(翻訳)に直接アクセスし、Hibernateのイベントを実行しません削除されるためです代わりに

Artist.executeUpdate("delete Artist a where a.id = ?", [artistId]) 
+0

artist.get(artistId)?.delete() 

を使用して、アーティストを削除する場合はカスケードの作品、これは孤児の削除を担当しています(DB内のトリガーではありません) – JesperSM