2014-02-14 66 views
0

我有两个表Users(id,name,email,role_id)role(id,type) 我使用@ManyToOne (cascade=CascadeType.ALL)作用,因为它的一个新的角色是越来越插入每次用户豆 。 但我希望用户使用角色表的现有条目。 请帮忙休眠:多对一映射两个表

回答

0

为用户中的role_id保留一个单独的@Column,除了用@ManyToOne注解的用户之外,然后将 role_id设置为Users并保留用户。你不需要级联,所以删除它有没有casacade类型而不是ALL。在@ManyToOne中,您应该给insertable = false & updatable = false以避免重复的列问题。

See this example

+0

谢谢我错过了这一点,.., – BiswajitP

1

您需要首先找到现有的Role对象,然后将其设置为User对象。

换句话说,在保存用户之前,角色对象需要已经被创建和管理。

1

我想

@Entity 
public class Users{ 
    @Id 
    private int id; 
    private String email; 
    @ManyToOne(cascade=CascadeType.ALL) 
    private Role role_id; 
} 

@Entity 
public class Role{ 
    @Id 
    private int id; 
    private String type; 
} 

使用JPA

创建第一

Role role1 = new Role(1,"Role1"); 
Role role2 = new Role(2,"Role2"); 

然后将角色添加到用户角色

User user1 = new User(1,"User1","mail",role1); 

EntityManager em = .... 
em.persist(user1); 

正如我们已经级联选项role1上和USER1将被保存在数据库中,不要忘记使用事务做这个操作

如果你想从数据库

首先使用预先存在的角色考虑检索
Role existingRole = em.find(Role.class, 1); 
User user1 = new User(1,"User1","mail",existingRole); 

EntityManager em = .... 
em.persist(user1); 
0

考虑到无论是在用户和角色的id列是主键,你需要的是持续的新用户时,首先从数据库中它的类型检索所需的角色,然后只设置在用户实体的作用,坚持用户。