gpt4 book ai didi

java - orphanRemoval=true 双向OneToOne

转载 作者:行者123 更新时间:2023-11-30 11:35:23 26 4
gpt4 key购买 nike

我对双向 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.

我使用 Hibernate 4 作为 JPA2 实现。

最佳答案

这是 Hibernate 中的一个已知问题(实际上在 JPA 规范中)。

参见 this bug report有关问题背景和可能的解决方法的更多信息。有 another ticket在您可以投票的同一问题上,因为前者已经关闭。

关于java - orphanRemoval=true 双向OneToOne,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15167911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com