Bonjour, voilà j'utilise un DAO

classe CustomerDao

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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    public class CustomerDao implements DaoInterface<Customer, String>{
 
 
 
        private Session currentSession;
 
        private Transaction currentTransaction;
 
        public CustomerDao() {
        }
 
 
        public Session openCurrentSession() {
            currentSession = getSessionFactory().openSession();
            return currentSession;
        }
 
        public Session openCurrentSessionwithTransaction() {
            currentSession = getSessionFactory().openSession();
            currentTransaction = currentSession.beginTransaction();
            return currentSession;
        }
 
        public void closeCurrentSession() {
            currentSession.close();
        }
 
        public void closeCurrentSessionwithTransaction() {
            currentTransaction.commit();
            currentSession.close();
        }
 
        private static SessionFactory getSessionFactory() {
            Configuration configuration = new Configuration().configure();
            StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
                    .applySettings(configuration.getProperties());
            SessionFactory sessionFactory = configuration.buildSessionFactory(builder.build());
            return sessionFactory;
        }
puis une classe CustomerService

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
19
20
public class CustomerService {
 
 
    private static CustomerDao customerDao;
 
    public CustomerService() {
        customerDao = new CustomerDao();
    }
 
    public void persist(Customer entity) {
        customerDao.openCurrentSessionwithTransaction();
        customerDao.persist(entity);
        customerDao.closeCurrentSessionwithTransaction();
    }
 
    public void update(Customer entity) {
        customerDao.openCurrentSessionwithTransaction();
        customerDao.update(entity);
        customerDao.closeCurrentSessionwithTransaction();
    }
et a chaque fois que je fais une operation d'ecriture, mise a jour ...

je fais un appel a une methode ex: public void update(Customer entity)
qui elle meme appelle une autre : customerDao.openCurrentSessionwithTransaction();

cette derniere appelle private static SessionFactory getSessionFactory()

L'idée ( surement pas la meilleur) est qu'a chaque operation sur la base de données, je recree une sessionFactory qui charge donc mon fichier cfg.xml , le driver...

Ne devrais je pas faire cela une seule fois par exemple au demarrage de l'application? genre dans le constructeur d'une servlet ou autre...?
merci @ tous