2012-10-23 40 views
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(); 
     } 
    } 

我是怎麼忽略?

+1

你是如何在你的代碼更新簽到? – smk

+0

我正在用同一個用戶添加一個新的SignIn。爲了堅持新的SignIn,我使用http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html#persist(java.lang.Object),就像我爲用戶實體做的一樣,第一個SignIn。 – AndrewBourgeois

+0

我認爲你需要檢索整個列表。並將其添加到該列表中。除非我錯過了一些東西 – smk

回答

0

我也必須在反面設置SignIn(用戶在我的情況)。

所以:
- 在
創建一個標誌 - 將其合併
- 添加它的用戶
- 合併用戶

相關問題