を更新することはできません私は私のGrailsアプリケーションにクォーツジョブを次ていますクォーツ・ジョブは、レコード
class DataWarehouseJob {
def execute(context) {
LeadList list = context.mergedJobDataMap.get('list')
if (list.processing) {
return
}
list.processing = true
list.save(failOnError: true)
...
}
}
list
仕事triggerNow
コールのパラメータとして渡され、それは正しい値が取り込まれます。このリストはすでにデータベースに存在します。それはリストを保存しようとしたときただし、次のエラーが発生します。
org.quartz.JobExecutionException: org.springframework.dao.DuplicateKeyException: A different object with the same identifier value was already associated with the session : [haystack.LeadList#169]; nested exception is org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [haystack.LeadList#169]
at grails.plugins.quartz.GrailsJobFactory$GrailsJob.execute(GrailsJobFactory.java:111)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: org.springframework.dao.DuplicateKeyException: A different object with the same identifier value was already associated with the session : [haystack.LeadList#169]; nested exception is org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [haystack.LeadList#169]
...
Caused by: org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [haystack.LeadList#169]
at org.hibernate.engine.internal.StatefulPersistenceContext.checkUniqueness(StatefulPersistenceContext.java:618)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performUpdate(DefaultSaveOrUpdateEventListener.java:301)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsDetached(DefaultSaveOrUpdateEventListener.java:244)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:109)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:90
...
は私がLeadList withNewSession
節約、@ExecuteInJTATransaction
でクラスに注釈を付ける、前に保存リストにmerge
を呼び出して、機能を保存するためのパラメータとしてflush: true
を追加しようとしたが、何もしています助けられました - 同じエラーが常に同じ行に現れます(list.save
)
これまでにこのコードが動作していて、どの変更がそれを壊す可能性があるのか分かりません - このクラスにかなりの時間。
コードは、Grailsの3.1.5で書かれており、私は解決策が誰かに利益をもたらすかもしれないので、質問を削除したくないのTomcat 8に