Niestety Hibernate nie obsługuje odroczonych ograniczeń.https://hibernate.atlassian.net/ przeglądaj/HHH-2248
Możesz spróbować pobawić się metodą entityManager.flush(), powiedzmy, że masz instrumenty o nazwach inst1 i 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");
Alternatywnie możesz pobrać jednostki z bazy danych, usunąć je z bazy danych, wykonać opróżnianie i utrwalać zaktualizowane jednostki. W ten sposób nie musisz wymyślać trzeciego imienia.
Nie jesteś pewien co do wpływu tych rozwiązań na wydajność, musisz sam się dowiedzieć.