Bonjour,
J'utilise JSF 2.0, Hibernate, MySQL, Tomcat7.0.39 et eclipse
Mon problème est le suivant :
J'ai ma page principale qui affiche toutes les données de ma table et pour chaque enregistrement j'ai une option de modification, suppression ou consultation.
Quand je veux consulter ou modifier un enregistrement pour la première fois, il m'affiche les bonnes valeurs, quand je procède à un certain nombre de modification de mes données les valeurs affichées sont correctes, mais à un moment données il affiche les anciennes valeurs au niveau des champs modifiés, le fait de raffrachir la page avec F5, ne me garantit pas l'affichage des valeurs correctes, quand je consulte la base de données, la modification a bien eu lieu, le seul moyen de récupérer les bonnes valeurs est de redémarrer tomcat.
J'affiche l'enregistrement au niveau de la console avant enregistrement dans la base de données, il est correcte, et quand je l'affiche après exécution de la requête de récupération, il ne l'est pas.
j'ai réalisé des actions, comme la suppression du cache , ajout de "AutoComit=true" dans la chaine de connexion Hibernate, mais sans résultats
Merci pour votre aide, cela fait plusieurs jours que j'essaye de résoudre ce problème sans y arriver

Ci-dessous les fichiers que j'utilise :
HibernateUtil.java

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
public class HibernateUtil {
    public static final SessionFactory sessionFactory;
 
    static {
        try {
            sessionFactory = new AnnotationConfiguration().configure("hibernate.cfg.xml").buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
   public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
hibernate.cfg.xml
Code xml : 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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
		"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
		"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/base?AutoCommit=true</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
 
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="cache.use_second_level_cache">false</property>
        <property name="org.provider_class*">org.hibernate.cache.NoCacheProvider</property>
        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
 
		<property name="hibernate.show_sql">true</property> 
 
        <mapping package="com.ma.bean"/>
		<mapping class="com.ma.bean.Stock"/>
    </session-factory>
</hibernate-configuration>
Méthode de modification
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 void editStock(Stock a) {
		Session session=null;
		try {
			session=HibernateUtil.getSessionFactory().getCurrentSession();
			 session.beginTransaction();
			 session.merge(a);
			 session.flush();
			 session.getTransaction().commit();
			 viderChampsStock(a);//Pour initialiser les champs de l'objet
		} catch (Exception e) {
			if(session.isOpen()){
				session.close();
			}
		}finally{
			if(session.isOpen()){
				session.close();
			}
		}
 
	}
Fonction de récupération de l'enregistrement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
@Override
	public Stock getStockById(int id) {
		Session session=HibernateUtil.getSessionFactory().getCurrentSession();
 
		 //session.setCacheMode(CacheMode.IGNORE);//je l'ai ajouté mais sans succès, j'ai du l'enlever vu qu'elle me crée problème ailleur
		 session.beginTransaction();
		 Stock a=(Stock) session.get(Stock.class,id);
		 System.out.println("Le Stock à afficher : "+a.toString());
		 if(a==null) throw new RuntimeException("Stock introuvable");
		 return a;
	}
Merci pour votre aide