Solución
OK, ¡el misterio está resuelto! Resultó que necesitaba llamar explícitamente a descarga () en la sesión objeto.
La siguiente respuesta me dio una pista:
¿Hibernate no guarda el objeto en la base de datos?
Ejemplo
Aquí hay un ejemplo de trabajo (preste atención a session.flush()
que debe llamarse antes de cerrar una sesión ):
@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();
}
}
}
}
Y de nuevo, cuando se usa MySQL funciona muy bien sin lavado explícito.
Observación interesante
La aplicación web de prueba mencionada anteriormente utilizó Hibernate puro configuración y SessionFactory de Hibernate (es decir, sin persistence.xml y JPA entityManager ). Pero también tengo la misma aplicación de prueba configurada para usar JPA . Y en esa aplicación todo funciona también sin vaciado explícito tanto con MySQL como con PostgreSQL.