J'étudie Hibernate et je réalise des petits TP. Actuellement j'en suis à essayer de comprendre la différence entre persist et save. Si j'ai bien compris, le persist n'affecte pas forcéement immédiatement un id à l'objet à persister mais surtout il est défini dans le cadre d'une transaction.

Or quand j'exécute le code suivant, j'ai mon objet qui est persisté quoi qu'il arrive. Y a-t-il quelque chose que je n'aurais pas comprise :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainApp {
 
    @Transactional
    public static void main(String[] args) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        session.beginTransaction();
 
        Imagerie imagerie = new Imagerie();
        imagerie.setNom("toto");
        session.save(imagerie);
        session.flush();
        if (1 == 1) { // On lève une exception avant le commit et à l'intérieur d'une transaction
            throw new NullPointerException("");
        }
        session.getTransaction().commit(); // ce code est inatteignable 
// L'entité "Imagerie" est tout de même persistée en base ! 
    }
}