PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Atomikos:Daten werden bei Verwendung von PostgreSQL nicht gespeichert

Lösung

OK, Rätsel ist gelöst! Es stellte sich heraus, dass ich explizit spülen () in der Sitzung Objekt.

Die folgende Antwort gab mir einen Hinweis:
Ruhezustand speichert Objekt nicht in der Datenbank?

Beispiel

Hier ist ein funktionierendes Beispiel (achten Sie auf session.flush()). die vor dem Schließen aufgerufen werden muss eine Sitzung ):

@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();
            }
        }
    }

}


Und noch einmal, wenn Sie MySQL verwenden, funktioniert es ohne ganz gut explizites Spülen.

Interessante Beobachtung

Die oben erwähnte Test-Webanwendung verwendete reines Hibernate Konfiguration und SessionFactory von Hibernate (also ohne persistence.xml und JPA entityManager ). Aber ich habe auch dieselbe Testanwendung für die Verwendung von JPA konfiguriert . Und in dieser Anwendung funktioniert auch alles ohne explizites Flushen sowohl mit MySQL als auch mit PostgreSQL.