Я немного смущен двунаправленным отношением OneToOne и удалением сирот. Это мои объекты:orphanRemoval = true двунаправленный OneToOne
@Entity
@Table(name = "city")
public class City {
@Id
@GeneratedValue
@Column
public Long _UID;
@OneToOne(mappedBy="city", orphanRemoval = true, cascade=CascadeType.ALL)
public Mayor mayor;
}
@Entity
@Table(name = "mayor")
public class Mayor {
@Id
@GeneratedValue
@Column
public Long _UID;
@OneToOne(optional=false)
public City city;
}
И если я пытаюсь эту сделку:
City c = em.find(City.class, (long) 1);
AssertNotNull(c.getMayor());//gives true
Mayor m = new Mayor("Ed", "Lee");
c.setMayor(m);
m.setCity(c);
em.flush(); //This creates new Mayor and adds it to City, but don't delete an old one.
Если установить мэра Null и флеш, прежде чем установить новый, он работает:
City c = em.find(City.class, (long) 1);
AssertNotNull(c.setMayor());//gives true
c.setMayor(null);
em.flush();
Mayor m = new Mayor("Ed", "Lee");
c.setMayor(m);
m.setCity(c);
em.flush(); //This creates new Mayor and adds it to City, but don't deletes an old one.
I используйте Hibernate 4 как реализацию JPA2.
1. Вы можете попробовать без '(необязательно = false)' ??? ... 2. вам нужно выполнить 'em.clear()' после 'em.flush()' – Alex