Solução
Pronto, o mistério está resolvido! Descobri que eu precisava chamar explicitamente limpar () na sessão objeto.
A resposta a seguir me deu uma dica:
Hibernar não salva o objeto no banco de dados?
Exemplo
Aqui está um exemplo funcional (preste atenção em
session.flush()
que deve ser chamado antes de fechar uma sessão ):@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();
}
}
}
}
E novamente, ao usar o MySQL, ele funciona bem sem rubor explícito.
Observação interessante
O aplicativo web de teste mencionado acima usou Hibernate puro configuração e SessionFactory do Hibernate (ou seja, sem persistence.xml e JPA entityManager ). Mas também tenho o mesmo aplicativo de teste configurado para usar JPA . E nessa aplicação tudo também funciona sem flushing explícito tanto com MySQL quanto com PostgreSQL.