Řešení
OK, záhada vyřešena! Ukázalo se, že jsem potřeboval výslovně zavolat spláchnout () na relaci objekt.
Následující odpověď mi dala nápovědu:
Hibernace neukládá objekt do databáze?
Příklad
Zde je funkční příklad (věnujte pozornost session.flush()
který je třeba zavolat před uzavřením relaci ):
@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();
}
}
}
}
A znovu, při použití MySQL to funguje dobře bez explicitní splachování.
Zajímavý postřeh
Výše zmíněná testovací webová aplikace používala čistou Hibernate konfigurace a Hibernate's SessionFactory (tj. bez persistence.xml a JPA entityManager ). Ale mám také stejnou testovací aplikaci nakonfigurovanou pro použití JPA . A v této aplikaci také vše funguje bez explicitního vyplachování jak s MySQL, tak s PostgreSQL.