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.