Rozwiązanie
OK, tajemnica rozwiązana! Okazało się, że potrzebuję jawnie wywołać płukanie () na sesji obiekt.
Poniższa odpowiedź dała mi wskazówkę:
Hibernacja nie zapisuje obiektu w bazie danych?
Przykład
Oto działający przykład (zwróć uwagę na session.flush()
które należy nazwać przed zamknięciem sesję ):
@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();
}
}
}
}
I znowu, gdy używasz MySQL, działa dobrze bez wyraźne spłukiwanie.
Ciekawa obserwacja
Wspomniana powyżej testowa aplikacja internetowa używała czystego Hibernacji konfiguracja i SessionFactory Hibernate (tzn. bez persistence.xml i JPA entityManager ). Ale mam też tę samą aplikację testową skonfigurowaną do korzystania z JPA . W tej aplikacji wszystko działa również bez jawnego opróżniania zarówno z MySQL, jak i PostgreSQL.