sql >> Database >  >> RDS >> PostgreSQL

Atomikos:gegevens worden niet opgeslagen bij gebruik van PostgreSQL

Oplossing

Oké, mysterie is opgelost! Het bleek dat ik expliciet spoelen () op de sessie voorwerp.

Het volgende antwoord gaf me een hint:
Sluimerstand niet opslaan Object in de database?

Voorbeeld

Hier is een werkend voorbeeld (let op session.flush() die voor sluitingstijd . moet worden aangeroepen een sessie ):

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

}


En nogmaals, bij gebruik van MySQL werkt het prima zonder expliciet flushen.

Interessante observatie

De bovengenoemde testwebtoepassing gebruikte pure Sluimerstand configuratie en Hibernate's SessionFactory (d.w.z. zonder persistentie.xml en JPA entityManager ). Maar ik heb dezelfde testtoepassing ook geconfigureerd om JPA te gebruiken . En in die applicatie werkt alles ook zonder expliciete flushing, zowel met MySQL als met PostgreSQL.




  1. Postgresql:Groeperen met limiet voor groepsgrootte met behulp van vensterfuncties

  2. Converteer epoche tot nu toe in sqlplus / Oracle

  3. Laravel heeft Veel relaties tellen het aantal vind-ik-leuks en reacties op de post

  4. Exporteren naar csv/excel-manier om voorloopnul op te nemen