Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Mengapa Hibernate membuang org.hibernate.exception.LockAcquisitionException?

Menurut pemetaan Anda, urutan operasi akan terlihat seperti ini:

Person p = DAO.findPerson(id);

Car car = new Car();
car.setPerson(p);

DAO.saveOrUpdate(car);

p.getCars().add(car);

Car firstCar = p.getCars().get(0);
firstCar.setPerson(null);
p.getCars().remove(firstCar);
if (p.officialCar.equals(firstCar)) {
   p.officialCar = null;
   p.officialCar.person = null;
}

DAO.delete(firstCar);

Sebuah pembaruan atau hapus berarti mendapatkan kunci eksklusif , bahkan di READ_COMMITTED tingkat isolasi.

Jika transaksi lain ingin memperbarui baris yang sama dengan transaksi yang sedang berjalan (yang telah mengunci baris yang dimaksud), Anda tidak akan mendapatkan kebuntuan, tetapi batas waktu akuisisi kunci pengecualian.

Karena Anda mengalami kebuntuan, itu berarti Anda memperoleh kunci di beberapa tabel dan akuisisi kunci tidak diatur dengan benar.

Jadi, pastikan bahwa metode lapisan layanan menetapkan batas transaksi, bukan metode DAO. Saya melihat Anda mendeklarasikan mendapatkan dan temukan metode untuk menggunakan DIDUKUNG, artinya mereka akan menggunakan transaksi hanya jika transaksi sedang dimulai. Saya pikir Anda harus menggunakan REQUIRED untuk itu juga, tetapi cukup tandai sebagai read-only = true .

Jadi pastikan aspek transaksi menerapkan batas transaksi pada "metode saya" dan bukan pada yang DAO.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Query:Bagaimana membandingkan dua kolom dari tabel yang berbeda yang memiliki nilai yang dipisahkan koma

  2. Bagaimana cara terbaik untuk membuat ulang database Oracle?

  3. Di server SQL, bagaimana saya bisa menanyakan kolom Oracle Timestamp melalui koneksi server Tertaut?

  4. EBS 12.2.5 dan Lebih Tinggi:Tombol Halaman Masuk Tidak Sejajar

  5. ORA-01950:tidak ada hak istimewa pada tablespace 'USERS'