1
我的實體,當一個一對多:JPA一對多刪除第一行(在許多側)插入表示另一個
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue
private int id = -1;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<SignIn> signIns;
}
@Entity
@Table(name = "SignIns")
public class SignIn {
@Id
@GeneratedValue
private int id;
@ManyToOne
private User user;
public SignIn(User user) {
this.user = user;
}
}
當我堅持一個用戶,然後持續一個登入與所創建的用戶,一切工作正常(每個表將有1行)。 當我重複使用創建的用戶堅持在另一個跡象,在連續的第一個跡象得到由新標誌代替
持久存儲代碼:
User user = new User();
persist(user);
SignIn signIn = new SignIn(user);
SignIn signIn2 = new SignIn(user);
persist(signIn);
persist(signIn2);
private void persist(Object entity) {
EntityManager em = entityManagerFactory.createEntityManager();
EntityTransaction tx = em.getTransaction();
try {
tx.begin();
em.merge(entity);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
em.close();
}
}
我是怎麼忽略?
你是如何在你的代碼更新簽到? – smk
我正在用同一個用戶添加一個新的SignIn。爲了堅持新的SignIn,我使用http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#persist(java.lang.Object),就像我爲用戶實體做的一樣,第一個SignIn。 – AndrewBourgeois
我認爲你需要檢索整個列表。並將其添加到該列表中。除非我錯過了一些東西 – smk