PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Atomikos :les données ne sont pas enregistrées lors de l'utilisation de PostgreSQL

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.