我一直在尋找解決我的問題的一段時間,並且目前被卡住了。@OneToMany持久性集不被檢索的一些實體
我有一個spring-batch應用程序,它從我的數據庫中檢索實體以刪除它們。 該批處理在4個環境中的3個(本地機器,測試服務器等)上工作得很好。
在K.O.上測試數據庫。服務器與我的機器上的應用程序做同樣的事情。 (並且所有4個實例的代碼已經是相同的)。
這裏發生了什麼:
我的第一個對象
@Table(name = "TABLE_1")
public class Object1 {
...
@OneToMany(mappedBy="object1")
private Set<Object2> myObj2 = new HashSet<Object2>();
}
我的第二個對象
@Table(name = "TABLE_2")
public class Object2 {
...
@NotNull
@ManyToOne
@Index(name = "FK_TABLE_1")
@JoinColumn(name = "TABLE_1_ID", referencedColumnName = "id")
private Object1 obj1;
}
所以,現在,從邏輯上講,我的批處理將獲得Object1
(準確的說我將有一個ParentObject
將包含多個Object1
實體)與Object2
的列表,以便我可以刪除它們(使用entity.remove()
,沒什麼習俗)。
但是,這並不完全在一臺服務器上工作,特別是在一個實體(特別是其他實體,但批處理引發此級別的異常)。
我檢查了數據庫的約束條件,數據以及我可以檢查的所有內容,並且數據庫實際上是相同的,所以應該沒有理由說這個實體/表中的行不會被刪除。
在執行批處理的每臺服務器/機器上,批處理塊大小是相同的,肯定使用相同版本的Java(pom.xml
文件相同)。
任何幫助和/或想法都非常受歡迎。 謝謝。
編輯1:忘記了異常:
USER.FK_FROM_TABLE_2,外鍵,上面寫着:TABLE_1(標識)必須TABLE_2引用
org.springframework.dao.DataIntegrityViolationException: could not delete: [Object1#14382]; SQL [delete from table_1 where id=? and version=?]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not delete: [Object1#14382] at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:643) .. at fr.covea.troisma.soja.batch.BatchService.launchJob(BatchService.java:69) at fr.mma.soecm.batchpurgedonnees.Main.main(Main.java:89) Caused by: org.hibernate.exception.ConstraintViolationException: could not delete: [Object1#14382] at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:96) .. at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76) at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512) ... 22 more Caused by: java.sql.SQLException: ORA-02292: constraint violation (USER.FK_FROM_TABLE_2) - enregistrement fils existant at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112) .. at org.hibernate.persister.entity.AbstractEntityPersister.delete(AbstractEntityPersister.java:2711) ... 34 more 14:42:48,480 ERROR [] [AbstractStep] - Encountered an error saving batch meta data. This job is now in an unknown state and should not be restarted. org.springframework.dao.OptimisticLockingFailureException: Attempt to update step execution id=1 with wrong version (1), where current version is 2 .. at fr.mma.soecm.batchpurgedonnees.Main.main(Main.java:89) 14:42:48,481 ERROR [] [Main] - Batch does not complete successfuly: status=UNKNOWN
你能分享異常嗎? – duardito
耶..形成。希望你明白這個主意。 – pegas
您是否需要指定級聯選項以首先刪除關聯的集合,從而避免FK違規? http://www.objectdb.com/java/jpa/persistence/delete –