Saya memiliki metode berikut:

@Transactional
public void saveUpdateAndDelete(Entity newEntity, Entity updatedEntity, long deleteEntityId) {
  entityRepository.save(newEntity);
  entityRepository.findById(updatedEntity.getId())
    .ifPresent(e -> e.setName(updatedEntity.getName));
  entityRepository.deleteById(deleteEntityId);
}

Bagaimana saya bisa memastikan bahwa semua pernyataan dalam metode saveUpdateAndDelete akan dieksekusi dalam satu transaksi?

Sunting: tujuan pertanyaan adalah untuk menyelesaikan beberapa masalah implementasi, bukan tentang bagaimana @Transactional ditangani oleh Spring dengan membuat kelas proxy, yang dijelaskan di sini: Musim semi - @Transaksional - Apa yang terjadi di latar belakang?.

1
dev123 14 Agustus 2019, 08:37

1 menjawab

Jawaban Terbaik

Seperti yang sudah dinyatakan oleh @JB Nizet dalam komentarnya, ini adalah tujuan yang tepat dari @Transactional, jadi semuanya akan berada dalam satu transaksi. Tetapi pastikan Anda memanggil metode dari kacang lain dan bukan dari metode lain di kelas yang sama! Seperti yang sudah Anda tunjukkan, transaksional tidak berfungsi saat itu.

1
Julian 14 Agustus 2019, 06:22