如何为以下场景创建Hibernate映射。
我有三个表,Users
,Systems
和System Assign
。
用户有三种类型 - 普通用户,超级用户和管理员。
Users
表有五列 - 用户ID,用户名,密码,电子邮件ID和userType。 userType将决定用户是超级用户还是管理员或普通用户。
Systems
表有一些列,但最重要的是systemsID
,它将用于映射。
我已经创建了一个表System Assign
来为具有两列user-ID和system_id的用户分配系统(或者如果需要可以更正它)。还创建了这两个作为各个表的外键。
映射的条件是:
此外,我还需要进行一些数据库更改:
我需要知道如何为这个senario创建hibernate类
@Entity
@Table(name = "SYSTEM_ASSIGN")
public class SAssign implements Serializable {
/**
*
*/
private static final long serialVersionUID = -1945028654484806943L;
@Id
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "USERSSO")
private Users user;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "SYSTEMID")
private Systems system;
public Users getUser() {
return user;
}
public void setUser(Users user) {
this.user = user;
}
public Systems getSystem() {
return system;
}
public void setSystem(Systems system) {
this.system = system;
}
}
答案 0 :(得分:1)
我使用Role
而不是userType
的列表以及用户和角色的@ManyToMany
关联。 Hibernate将创建@ManyToMany
关联的连接表。您不需要为它使用持久化类。
带有映射的类:usersystem
映射测试:UserSystemTest.java
public enum RoleEnum {
ADMIN, USER, SUPER_USER
}
@Entity
@Table(name = "roles")
public class Role {
@Id
@GeneratedValue
@Column(name = "f_pid")
private Long pid;
@Column(name = "f_role")
@Enumerated(EnumType.STRING)
private RoleEnum role;
}
@Entity
@Table(name = "systems")
public class SomeSystem {
@Id
@GeneratedValue
@Column(name = "f_pid")
private Long pid;
@Column(name = "f_name")
private String name;
}
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue
@Column(name = "f_pid")
private Long pid;
@Column(name = "f_user_name")
private String userName;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_roles", joinColumns = { @JoinColumn(name = "fk_user") },
inverseJoinColumns = { @JoinColumn(name = "fk_role") })
private List<Role> roles = new ArrayList<Role>();
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "system_assign", joinColumns = { @JoinColumn(name = "fk_user") },
inverseJoinColumns = { @JoinColumn(name = "fk_system") })
private List<SomeSystem> systems = new ArrayList<SomeSystem>();
}