JPA并没有坚持孩子

时间:2012-04-07 16:15:39

标签: java database jpa

以下情景:

我有

用户对象:

...
@Column(name = "TITLE")
private String title;
@NotNull
@NotEmpty
@Column(name = "STREET_ADRESS")
private String streetAdress;
@NotNull
@NotEmpty
@Column(name = "CITY")
private String city;

...

@OneToMany(fetch = FetchType.EAGER)
@NotNull
@NotEmpty
protected Set<Role> roles = new HashSet<Role>();

    Role roleDaoById = roleService.getRoleByName(RoleName.User.toString());
    Set<Role> roles = new HashSet<Role>();
    roles.add(roleDaoById);
    member.setRoles(roles);
    member.setSuspend(false);
    member.setPlayer(true);
memberService.addMember(member); 

我的问题是角色已经在数据库中可用。这就是我通过roleService加载它们的原因。 我调用memberService.addMember,然后用em.persist(member)调用我的dao。但是这个调用确实再次保存了角色,我得到了角色对象的重复键错误。 我只想保存成员,然后为角色创建连接表条目。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

您的关系用户 - 角色是多对多(一个用户有多个角色,多个用户可以拥有相同的角色),但您使用一对多注释它。