意外插入我有兩個對象之間一個非常基本的關係:執行的EclipseLink在許多一對一的關係
@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的。
我在事務執行上的一個更新:
@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表上的新插入。然後Oracle因爲違反了一個獨特的違反規定而抱怨(Eclipselink試圖保留的StatusOfA已經存在......)。 這裏沒有Cascading,所以問題不在那裏,Hibernate(在JPA2中)的行爲如同例外。
在同一個項目中,我已經做了一些更復雜的關係,我真的很驚訝地發現這裏的關係不起作用。
在此先感謝您的幫助。
感謝您的回覆 所有的daos共享同一個實體管理器。 getStatusOfAById執行query.getSingleResult()。 這兩個對象「a」和「anotherStatusOfA」還連接實體。據我瞭解的持久性機制,合併甚至不需要...... – Jodenis 2011-06-07 13:23:45