これはおそらくルーキーの間違いなので、事前に私を許してください。Grailsでオブジェクトを削除する際の問題 - 遅くてまだ実際には削除されていない
私は2つのドメインクラス、1つはドメインと呼ばれ、もう1つはページと呼ばれています。以下のコードが示すように、ドメインには多くのページがあります。
class Domain {
...
static hasMany = [ pages : Page, ... ]
static mapping = {
pages lazy:true
}
}
class Page {
String identifier
...
static belongsTo = [ domain : Domain ]
static hasMany = [ ... ]
static constraints = {
identifier(blank:false, unique:'domain')
}
static mapping = {
...
domain lazy:true
}
}
私のアプリケーションには、とりわけ、ドメイン上のページが作成される長いアルゴリズムがあります。以前の実行と同じ引数を使用してアルゴリズムを実行すると、前の実行で作成されたすべてのページが削除され、アルゴリズムが再度実行されます。
私は2つの問題を抱えて:私は、ドメインから特定のページを削除すると
問題#1 を使用して:
def domain = page.domain
domain.removeFromPages(page);
page.delete()
domain.save(flush:true)
をこれが最終的に、ドメインのすべてのページをフェッチし、ロードするために休止状態を引き起こし数千のクエリが発生します(ドメインには多数のページがあります)。これでパフォーマンスをどのように改善できますか? - sqlを直接実行してページを削除すると、データベースと休止状態が同期しなくなります。
問題#2 私は後でもう一度ページを作成します。
def page = new Page(identifier:'...').save(failOnError:true)
を私が取得:
org.hibernate.NonUniqueObjectException: a different object with the same identifier value was already associated with the session
すべてのヘルプは大歓迎です - 私はここに私の心を失っています: -/
こんにちは、Thxはレスポンスのためにたくさんあります。しかし、パフォーマンスの部分はバッチ削除の問題ではなく、関係の問題のほうが多く、他の回答が指摘したとおりです。しかし、戦争はまだ終わっていない。私はpage.delete(flush:true)を使ってページを削除していて、削除されたページをフェッチできない行の中でも、それは魔法のようにまだ存在します。後でページを作成したいときに、「org.springframework.orm.hibernate3.HibernateSystemException:同じ識別子値を持つ別のオブジェクトが既にセッションに関連付けられています」というメッセージが表示されるので、 – Krauw