データベース内のテーブルの一部を更新し、これらの作業をすべて1トランザクションで実行したい場合は、まず branchbuildin(テーブル)のエントリを削除し、新しいアクションを挿入してください。 問題同じテーブル名とbranch_fkを持つエントリを挿入したときに発生しました(このテーブルにこの制約があります(uniqueConstraints = {@ UniqueConstraint(columnNames = {"buildingname"、 "branch_fk"})})))セッションを休止し、通常のJDBCトランザクションを使用するこれらの問題はありません。Hibernateトランザクションの重複問題
List<Integer> allBranchBuilding = branchBuildingDao.getAllBranchBuildingID(pkId, sess);
for (Integer integer : allBranchBuilding) {
branchBuildingDao.delete(integer, sess); // delete kardane tamame BranchBuilding ha va tel haie aanha
}
Address myAdr = new Address();
setAddress(myAdr, centralFlag, city, latit, longit, mainstreet, remainAdr, state);
BranchBuildingEntity bbe = new BranchBuildingEntity();
setBranchBuildingEntity(bbe, be, myAdr, city, centralFlag, latit, longit, mainstreet, buildingName, remainAdr, state, des);
branchBuildingDao.save(bbe, sess);//Exception Occurred
私はメソッドの最初で私のセッションを取得:
Session sess = null;
sess = HibernateUtil.getSession();
Transaction tx = sess.beginTransaction();
Tanxしかし、私はセッションを洗練し、その後、私の接続CUTOFFは、フラッシュ後にトランザクションのロールバックを行いますか? 私はすべての仕事を1つのトランザクションで行う必要があります(それらの間をフラッシュしてトランザクションのロールバックやコミットを傷つけることはできますか?) – Am1rr3zA
KLEが正しい(以前に削除されたエンティティでは 'evict()'を呼び出すことを除いて、手元には問題はないが問題はない)。 "flush"はセッション状態をデータベースと同期させる単なるプロセスである。必要な挿入/更新/削除ステートメントをデータベースに発行します。トランザクションがコミットされていない限り、同じステートメントを手動で発行するのと変わらないトランザクションに関しては、すべてのステートメントはロールバックされます(明示的なロールバック、接続の切断、サーバーの停止、 – ChssPly76
@ ChssPly76こんにちは。私はあなたの「エビクト」のコメントに興味があります。問題を拡大できますか? – KLE