2014-05-21 76 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,那么父母为什么需要先保存,这是可以理解的。