我在两个对象之间有一个非常基本的关系:
@Entity
public class A {
@ManyToOne(optional = false)
@JoinColumn(name="B_ID", insertable=false, updatable=true)
private StatusOfA sa;
getter+setter
}
@Entity
public class StatusOfA {
@Id
private long id;
@Column
private String status;
getter+setter
}
DB 中只有一组有限的 StatusOfA。
我在事务中对 A 执行更新:
@TransactionalAttribute
public void updateStatusOfA(long id) {
A a = aDao.getAById(123);
if(a != null) {
a.getStatusOfA().getId(); //just to ensure that the object is loaded from DB
StatusOfA anotherStatusOfA = statusOfADao.getStatusOfAById(456);
a.setStatusOfA(aontherStatusOfA);
aDao.saveOrPersistA(a);
}
}
saveOrPersistA 方法在这里合并“a”。
我希望 Eclipselink 只对“a”执行更新以更新 StatusOfA,但它正在对 StatusOfA 表执行新插入。然后甲骨文抱怨独特的约束冲突(Eclipselink 试图坚持的 StatusOfA 已经存在......)。这里没有级联,所以问题不存在,Hibernate(在 JPA2 中)表现得异常。
在同一个项目中,我已经建立了一些更复杂的关系,我很惊讶地看到这里的关系不起作用。
在此先感谢您的帮助。