16

タイプのエンティティを保存しようとすると失敗する Grails アプリケーションの統合テストがあります。Member

invitingMember.save(flush: true)

これにより、次の例外が発生します

org.hibernate.AssertionFailure: コレクション [com.mycompany.facet.Facet.channels] は com.mycompany.member.MemberConnectionService.addOrUpdateContact(MemberConnectionService.groovy:939) で flush() によって処理されませんでした

トランザクションの早い段階で、オブジェクトを のコレクション プロパティに追加しますinvitingMember。コレクションに追加されたオブジェクトが永続化されるのはこの時点だけであるため、上記の行で例外がスローされると思います。

4

4 に答える 4

9

根本的な問題は、おそらくHibernateが保存をカスケードしないことです。したがって、をフラッシュするMemberと、Hibernateはコレクションがまだダーティであることに気付きます(これはおそらくあなたが望むものではありません)。したがって、コレクションを手動でフラッシュするか、Hibernateにすべての更新をカスケードするように指示します

于 2009-11-09T15:12:31.060 に答える
4

ここで可能な解決策を見つけました。

実際には、toString、equals、hashcode を見て、遅延アクセサーにアクセスしていないことを確認してください。

私はJavaについて話していることを知っています。ここでの質問はgrailsに関するものですが、grailsにも同じ種類のものがあるかもしれません。

編集することを躊躇しないでください。

それは私にとって問題でした(Javaで)

于 2012-01-04T14:08:47.273 に答える
2

そのexeceptionに遭遇したのは、beforeInsert、beforeUpdateなどのHibernateイベントを使用しているときだけです。これらを使用していますか?

これに関連するJIRAの問題があり、Grails1.2で修正されています。

于 2009-11-09T22:10:29.763 に答える
2

コレクションから要素を削除した後、コレクションに要素を追加しようとすると、そのエラーが発生しました。save(flush:true)コレクションに新しい要素を追加する前に呼び出すことで解決しました。

  • 私の場合、コレクションは常にselect.
于 2015-01-30T15:05:00.897 に答える