Bonjour,
Cela fait plusieurs mois que je développe une webapp utilisant hibernate et je me trouve face à un problème que je n'arrive pas à expliquer: Lorsque j'ajoute une entité, celle-ci n'apparait pas dans la liste des entités que je récupère après l'avoir ajouté (en utilisant une session différente pour la création / listing). Si je re-éxecute plusieurs fois la requête, elle fini par apparaitre dans la liste, parfois disparait. C'est de même pour la modification d'une colonne: si je change la propriété "nom" (un String) d'une entité (ou bien une relation 1->n), parfois le vieux nom apparait, parfois le nouveaux. Si je redémarre le serveur, tout rentre dans l'ordre (j'utilise spring-mvc avec des controlleurs rest).
J'ai bien vérifier que le cache lvl 2 soit désactivé. 
Si je recréé une nouvelle SessionFactory à chaque ouverture de session, cela fonctionne (mais bien sur ce n'est absolument pas le but - c'était juste pour tester).
Voici mon fichier de config hibernate 
Code:
      <!-- Database connection settings -->
      <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
      <property name="connection.username">xxxxx</property>
      <property name="connection.password">xxxxx</property>
      <!-- JDBC connection pool (use the built-in) -->
      <property name="connection.pool_size">1</property>
      <!-- SQL dialect -->
      <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
      <!-- Enable Hibernate's automatic session context management -->
      <property name="hibernate.current_session_context_class">thread</property>
      <property name="hibernate.cache.use_query_cache">false</property>
      
      <!-- Disable/Enable the second-level cache  -->
      <property name="hibernate.use_second_level_cache">false</property>
      <property name="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</property>  
      
      <!-- Drop and re-create the database schema on startup -->
      <property name="hbm2ddl.auto">update</property>
      <!-- Echo all executed SQL to stdout -->
      <property name="hibernate.show_sql">true</property>
Et voici le simple test que j'effectue pour me rendre compte que cela ne fonctionne pas: 
Code:
      // créé les composants de l'option et vérifie qu'elles existent après la création
      TypeEntite1 entite1 = new TypeEntite1(0L,"entite1",ecole, annee);
      Session session = HibernateUtil.getInstance().getSessionFactory().openSession();
      session.beginTransaction();
      session.save(entite1);
      session.getTransaction().commit();
      session.close();
      checkOptionComposantExist("entite1", TypeEntite1.class); // la première entité ajouté est toujours retrouvée dans la liste
      
      
      TypeEntite2 entite2 = new TypeEntite2(0L,"entite2",ecole, annee);
      session = HibernateUtil.getInstance().getSessionFactory().openSession();
      session.beginTransaction();
      session.save(entite2);
      session.getTransaction().commit();
      session.close();
      checkOptionComposantExist("entite2", TypeEntite2.class); // toutes les autres entité ne sont jamais affichée dans la liste
Voici ma méthode qui check si l'entité est bien retrouvée après ajout:
Code:
   private void checkOptionComposantExist(String nomAttendu,Class<? extends OptionAbstract> type){
      
      List<OptionAbstract> optionsComposants = genericDAO.list(type);
      
      if(optionsComposants.size() == 0)
         fail("Aucun éléments d'options trouvé pour le type " + type.getSimpleName());
      
      for(OptionAbstract optionComposant:optionsComposants){
         
         if(optionComposant.getNom().equals(nomAttendu))
            return;
      }
      
      fail("L'élément de l'options de type " + type.getSimpleName() + " avec comme nom " + nomAttendu + " n'a pas été trouvé");
   }
Et voici la méthode qui récupère une liste d'un certain type d'entité: 
Code:
   public List list(Class<?> typeParameterClass) {
      Session session = sessionFactory.openSession();
      List records = session.createCriteria(typeParameterClass).list();
      session.disconnect();
      return records;
      
   }