Pertama-tama, manajemen transaksi harus dilakukan pada lapisan layanan, bukan pada lapisan DAO karena hal itu akan menciptakan banyak overhead kinerja (untuk menangani tingkat isolasi transaksi yang sesuai dan penyebaran pada setiap metode yang berbeda). Juga, ruang lingkup unit kerja berasal dari lapisan layanan alih-alih lapisan akses data: bayangkan melakukan proses bisnis yang perlu berurusan dengan 2 atau lebih DAO.
Ada banyak diskusi di internet yang menunjuk ke arah itu seperti di sini , di sini dan di sini .
Bagaimanapun, karena ini adalah wawancara, mari kita terima pertanyaan apa adanya. Dari sudut pandang saya, Anda akan menggunakan @Transactional
anotasi (atau konfigurasi XML) di kedua metode dan dengan propagasi transaksi dengan REQUIRED
nilai. Dengan begitu, ketika salah satu dari metode tersebut dipanggil dan jika tidak ada transaksi sebelumnya, transaksi baru akan dibuat:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
danbar()
berbagi transaksi yang sama dan jika 1 gagal 1 lainnya juga akan kembalikan? Bisakah Anda memberikan klarifikasi?