我有两张表Users(id,name,email,role_id)
和role(id,type)
我在用户bean中使用@ManyToOne (cascade=CascadeType.ALL)
角色
因此,每次都会插入一个新角色。
但我希望用户使用角色表的现有条目。
请帮忙
答案 0 :(得分:1)
您需要先找到现有的Role对象,然后将其设置为User对象。
换句话说,在保存用户之前,需要已经创建和管理Role对象。
答案 1 :(得分: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);
答案 2 :(得分:0)
除了使用@ManyToOne注释的用户之外,在用户中为role_id保留一个单独的@Column然后设置 role_id到用户并持久保存用户。你不需要级联所以删除它以使casacade类型为none而不是ALL。在@ManyToOne中你应该给出insertable = false& updatable = false以避免重复列问题。
答案 3 :(得分:0)
考虑到用户和角色中的id
列都是主键,您需要的是当新用户首先通过数据库中的类型检索所需角色时,然后只需在用户实体中设置该角色并保留该用户