spring jpa两个ManyToOne外键

时间:2014-05-21 09:31:40

标签: hibernate spring-mvc jpa

@Entity
@Table(name = "users")
public class User {

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

    @Column(unique = true)
    String username;

}

游戏桌

@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;

1 个答案:

答案 0 :(得分:0)

Hibernate持久化方法旨在移动实体from the NEW state to MANAGED one。将实体与给定的持久性上下文关联后,您应该使用merge,而不是persist。

现在,我认为您的映射不遵循标准的ORM实体关联标准。

  1. 游戏应该总是包含2个用户吗?
  2. 用户不应该与游戏有关联吗?
  3. 这些问题非常重要,因为你经常有父母协会方面和儿童协会方面。父母需要先被保存,然后是孩子。

    这是因为孩子与父母有一个FK关联,如果它被标记为NOT NULL,那么为什么父母需要先被保存是可以理解的。