0

私はこのエラーに 1 週​​間悩まされてきましたが、これについて真剣に頭がおかしくなっています! 私は複数の実装と回避策とハックなどを試しましたが、別の例外にスタブリングし続けています。

Executor プラグインを使用してメソッドを非同期で実行しています。

runAsync{
   run(...)
}

このメソッドは、最初にいくつかのオブジェクトを削除します。

page.delete(flush:true)

そして、後でそれらのオブジェクトを再作成する可能性があります:

def page = new Page(type : Page.TYPE_TABLE, domain : domainVersion.domain, identifier : tableName)
page.save(flush: true, failOnError: true)

しかし、それは次の例外で失敗します:

Caused by: org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session: [com.ramboll.egs.ohs.domain.Domain#1]

Pageとの間の関係は、属性を持つことDomainによって簡単に実装されます。いいえ、パフォーマンスの問題により、以前の投稿でこれに落胆したためです。PageDomainhasManybelongsTo

savemergewithTransachtionおよびPersistenceContextInterceptor...の考えられるすべての組み合わせを試したと思います。

これはどのように機能するはずですか?例をください。

前もって感謝します!

4

1 に答える 1

0

新しいスレッドでの作業が問題であるようには見えません。標準的な検証の問題のようです。これPageは、save() が成功した場合、またはnull1 つ以上の検証エラーがある場合にインスタンスを返すため、検証エラーを示します。いくつかのオプションがあります:

def page = new Page(type : Page.TYPE_TABLE,
     domain: dbUpdate.domainVersion.domain, identifier: tableName)
page.save(flush:true)
if (page.hasErrors()) {
   // handle errors
}
else {
   def pageVersion = createPageVersion(page, dbUpdate.domainVersion,
       con, tableName, dbUpdate.author).save(flush:true)
}

またはfailOnError例外をスローするために使用します。

def page = new Page(type : Page.TYPE_TABLE, identifier: tableName,
     domain: dbUpdate.domainVersion.domain).save(flush:true, failOnError: true)
def pageVersion = createPageVersion(page, dbUpdate.domainVersion,
    con, tableName, dbUpdate.author).save(flush:true)
于 2011-08-12T17:12:56.517 に答える