2014-05-21 72 views
0
@Entity 
@Table(name = "users") 
public class User { 

    @Id 
    @GeneratedValue 
    int id; 
    String email; 
    String password; 

    @Column(unique = true) 
    String username; 

} 

遊戲桌爲春天JPA 2分多對一外鍵

@Entity 
@Table(name = "games") 
public class Game implements Serializable { 

    @Id 
    @GeneratedValue 
    @Column(name = "id") 
    int id; 

    @ManyToOne(cascade = CascadeType.ALL) 
    private User user1; 
    @ManyToOne(cascade = CascadeType.ALL) 
    private User user2; 
} 

當我嘗試插入記錄它給了錯誤:

脫離實體被persist:ttt.model.User;

+0

提供更多的代碼,你如何堅持實體?哪個代碼行可以給你確切的例外? – kamil

+0

不應該有一個'Game'與'User'有'@ OneToMany'關係嗎?在這種情況下,您可能想要爲'Game'實體使用一些'User'集合。我知道什麼,我可能是錯的。你沒有真正解釋太多。 –

回答

0

Hibernate持久化方法旨在移動實體from the NEW state to MANAGED one。一旦你將一個實體關聯到一個給定的持久化上下文,你應該使用merge而不是persist。

現在,我認爲你的映射不遵循標準的ORM實體關聯標準。

  1. 難道遊戲應該總是包含2個用戶嗎?
  2. 用戶不應該有關聯回到遊戲?

這些問題真的很重要,因爲你經常有一個家長協會方面和一個兒童協會方面。這是需要首先保存的父母,然後是孩子。

這是因爲孩子與家長有一個FK關聯,如果它被標記爲NOT NULL,那麼父母爲什麼需要先保存,這是可以理解的。