Solution
OK, le mystère est résolu ! Il s'est avéré que j'avais besoin d'appeler explicitement affleurant () sur la session objet.
La réponse suivante m'a donné un indice :
Hibernate n'enregistre pas l'objet dans la base de données ?
Exemple
Voici un exemple de travail (faites attention à session.flush()
qui doit être appelé avant de fermer une séance ):
@Service
public class TableOneDaoImpl extends HibernateDaoSupport implements TableOneDao {
@Override
public void save(TableOne tableOne) throws Exception {
Session session = null;
try {
session = getSessionFactory().openSession();
session.save(tableOne);
session.flush();
} catch (Exception e) {
throw new Exception("Could not save tableOne!", e);
} finally {
if (session != null) {
session.close();
}
}
}
}
Et encore une fois, lorsque vous utilisez MySQL, cela fonctionne très bien sans vidage explicite.
Observation intéressante
L'application Web de test mentionnée ci-dessus a utilisé Hibernate pur configuration et SessionFactory d'Hibernate (c'est-à-dire sans persistence.xml et JPA entityManager ). Mais j'ai aussi la même application de test configurée pour utiliser JPA . Et dans cette application, tout fonctionne également sans vidage explicite avec MySQL et PostgreSQL.