我試圖使用EclipseLink保存名爲Stat的對象。如果該ID存在於數據庫中,請更新該對象。如果不是,則創建一個新對象。這是我的對象:JPA添加或更新對象
@Entity
public class Stat {
@Column
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public long id;
@JoinColumn
@ManyToOne
public User user;
@Column
public boolean accepted;
@Column
public boolean finished;
public Stat() {
}
}
這裏是我的方法添加/更新對象。
public long addReplaceStat(Stat stat) {
em.getTransaction().begin();
Stat oldStat = em.find(Stat.class, stat.id);
if (oldStat == null)
em.persist(stat);
else
em.merge(stat);
em.getTransaction().commit();
em.getTransaction().begin();
Stat newStat = em.find(Stat.class, stat.id);
if (newStat != null)
em.refresh(newStat);
em.getTransaction().commit();
return stat.id;
}
我的問題是,我在em.refresh()說法得到異常「屬性類[用戶]的[ID]被映射到。不允許更新數據庫中的主鍵列。」我不明白爲什麼。不應刷新只是更新我的託管對象的值沒有問題?
什麼是最好的成語做我想要的(添加或更新)?
你可以添加錯誤stacdump –