Ya, dimungkinkan untuk menggunakan @Transactional pada metode pribadi, tetapi seperti yang orang lain katakan ini tidak akan berhasil. Anda perlu menggunakan AspectJ. Butuh beberapa waktu untuk memikirkan cara membuatnya bekerja. Saya akan membagikan hasil saya.
Saya memilih untuk menggunakan tenun waktu kompilasi alih-alih tenun waktu karena saya pikir ini merupakan pilihan yang lebih baik secara keseluruhan. Saya juga menggunakan Java 8 sehingga Anda mungkin perlu menyesuaikan beberapa parameter.
Pertama, tambahkan dependensi untuk aspekjrt.
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.8.8</version>
</dependency>
Kemudian tambahkan plugin AspectJ untuk melakukan tenun bytecode yang sebenarnya di Maven (ini mungkin bukan contoh minimal).
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.8</version>
<configuration>
<complianceLevel>1.8</complianceLevel>
<source>1.8</source>
<target>1.8</target>
<aspectLibraries>
<aspectLibrary>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
</aspectLibrary>
</aspectLibraries>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
Akhirnya tambahkan ini ke kelas konfigurasi Anda
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
Sekarang Anda harus dapat menggunakan @Transactional pada metode pribadi.
Satu peringatan untuk pendekatan ini: Anda harus mengkonfigurasi IDE Anda untuk mengetahui AspectJ sebaliknya jika Anda menjalankan aplikasi melalui Eclipse misalnya itu mungkin tidak berfungsi. Pastikan Anda menguji terhadap Maven langsung sebagai cek kewarasan.