2016-04-28 2 views
0

Warum brauchen wir Annotation @Transactional in Springdata für Update-Funktion hinzufügen, während wir es nicht zum Erstellen, Entfernen, Löschen brauchen?Warum brauchen wir Annotation @Transactional in springdata für Update-Funktion hinzufügen?

Unten ist ein Beispiel.

@Service 
public class PersonService 
{ 
    @Autowired 
    private PersonRepository personRepository; 

    @Transactional 
    public int updateEmail(String email,Integer id) 
    { 
     return personRepository.updateEmail(email, id); 
    } 

} 

Antwort

0

Von der offiziellen docs:

CRUD Methoden auf Repository-Instanzen sind standardmäßig Transaktions. Für Lesevorgänge wird das Flag readOnly für die Transaktionskonfiguration auf "true" gesetzt, alle anderen werden mit einer einfachen @Transactional konfiguriert, sodass die Standardtransaktionskonfiguration angewendet wird.

So können wir alle Standardmethoden für die Datenmanipulation schließen daraus, dass (z delete, deleteAll, save etc.) @Transactional standardmäßig verwenden. Und wir können JpaRepository Standardimplementierung SimpleJpaRepository betrachten, um das zu bestätigen. Die nächste Sache ist, wenn Sie Ihre eigenen Methoden für Datenmanipulation schreiben (und wie ich sehe, erstellen Sie eine Methode, um eine E-Mail für die Person-Klasse zu aktualisieren) sie sind @Transactional(readOnly = true) per Voreinstellung daher solche Methoden können ohnehin die vorhandenen Daten nicht beeinflussen. Deshalb müssen wir sie mit @Transactional Annotation kommentieren.

Verwandte Themen