私は自分の問題の解決策をしばらく探していましたが、現在行き詰まっています。
データベースからエンティティを取得して削除するスプリング バッチ アプリケーションがあります。バッチは、4 つの環境のうち 3 つ (ローカル マシン、テスト サーバーなど) で問題なく動作します。
私のマシン上のアプリケーションで KO サーバー上のデータベースをテストすると、同じことが起こります。(そして、コードはすでに 4 つのインスタンスすべてで同じです)。
何が起こるかは次のとおりです。
私の最初のオブジェクト
@Table(name = "TABLE_1")
public class Object1 {
...
@OneToMany(mappedBy="object1")
private Set<Object2> myObj2 = new HashSet<Object2> ();
}
私の2番目のオブジェクト
@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()
カスタムは何も使用しません)。
ただし、これは特定の 1 つのサーバー、特に 1 つのエンティティで完全に機能するわけではありません (他にも存在する可能性がありますが、バッチはこのレベルで例外をスローします)。
データベースの制約、データ、および確認できるすべてのものを確認しましたが、データベースは実質的に同一であるため、このエンティティ/テーブルの行が削除されない理由はありません。
Spring バッチのチャンク サイズは、バッチを実行するすべてのサーバー/マシンで同じであり、同じバージョンの Java が確実に使用されます (pom.xml
ファイルは同じです)。
どんな助けやアイデアも大歓迎です。ありがとうございました。
編集1:例外を忘れました:
USER.FK_FROM_TABLE_2 : 次の外部キー: table_1 (ID) は table_2 で参照する必要があります
org.springframework.dao.DataIntegrityViolationException: 削除できませんでした: [Object1#14382]; SQL [テーブル 1 から削除します。ここで id=? バージョン=?]; 制約 [null]; ネストされた例外は org.hibernate.exception.ConstraintViolationException: 削除できませんでした: [Object1#14382] org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:643) で .. fr.covea.troisma.soja.batch.BatchService.launchJob (BatchService.java:69) で fr.mma.soecm.batchpurgedonnees.Main.main (Main.java:89) で 原因: org.hibernate.exception.ConstraintViolationException: 削除できませんでした: [Object1#14382] org.hibernate.exception.SQLStateConverter.convert (SQLStateConverter.java:96) で .. org.hibernate.ejb.TransactionImpl.commit (TransactionImpl.java:76) で org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:512)で ... 22以上 原因: java.sql.SQLException: ORA-02292: 制約違反 (USER.FK_FROM_TABLE_2) - 登録ファイルが存在します oracle.jdbc.driver.DatabaseError.throwSqlException (DatabaseError.java:112) で .. org.hibernate.persister.entity.AbstractEntityPersister.delete (AbstractEntityPersister.java:2711) で ... 34 以上 14:42:48,480 ERROR [] [AbstractStep] - バッチ メタ データの保存中にエラーが発生しました。このジョブは現在不明な状態にあるため、再開しないでください。 org.springframework.dao.OptimisticLockingFailureException: ステップ実行 id=1 を間違ったバージョン (1) で更新しようとしています。現在のバージョンは 2 です .. fr.mma.soecm.batchpurgedonnees.Main.main (Main.java:89) で 14:42:48,481 ERROR [] [Main] - バッチが正常に完了しませんでした: status=UNKNOWN