PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

È possibile definire un vincolo INITIALLY DEFERRED utilizzando un'annotazione Hibernate?

Sfortunatamente, Hibernate non supporta i vincoli posticipati.https://hibernate.atlassian.net/ sfoglia/HHH-2248

Potresti provare a giocare con il metodo entityManager.flush(), supponiamo che tu abbia strumenti con nomi inst1 e inst2 :

Instrument inst1 = entityManager.find(Instrument.class, 1);
// change name of first Instrument to some random one
inst1.setName("inst3");
entityManager.flush();
Instrument inst2 = entityManager.find(Instrument.class, 2);
inst2.setName("inst1");
entityManager.flush();
inst1.setName("inst2");

In alternativa è possibile ottenere le entità dal DB, eliminarle dal DB, eseguire lo svuotamento e persistere le entità aggiornate. In questo modo non devi inventare il terzo nome.

Non sei sicuro dell'effetto sulle prestazioni di queste soluzioni, devi capirlo da solo.