【发布时间】:2016-06-17 18:14:07
【问题描述】:
我正在开发一个用户可以拥有一个或多个角色的应用程序,为此我决定创建一个映射(中间)表,所以我以User、Role 和UserRole 结束,如下所示:
在此应用中,用户所拥有的角色决定了他何时可以访问前端中的某些视图或操作。我唯一需要的是检索用户拥有的角色并添加/删除它们。 JPA Tools 为我创建了他遵循 EJB(简化):
用户
/**
* The persistent class for the usuario database table.
*
*/
@Entity
@NamedQuery(name="Usuario.findAll", query="SELECT u FROM Usuario u")
public class Usuario implements Serializable {
private static final long serialVersionUID = 1L;
private int idUsuario;
private List<RolUsuario> rolUsuarios;
public Usuario() {
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getIdUsuario() {
return this.idUsuario;
}
public void setIdUsuario(int idUsuario) {
this.idUsuario = idUsuario;
}
//bi-directional many-to-one association to RolUsuario
@OneToMany(mappedBy="usuario")
public List<RolUsuario> getRolUsuarios() {
return this.rolUsuarios;
}
public void setRolUsuarios(List<RolUsuario> rolUsuarios) {
this.rolUsuarios = rolUsuarios;
}
public RolUsuario addRolUsuario(RolUsuario rolUsuario) {
getRolUsuarios().add(rolUsuario);
rolUsuario.setUsuario(this);
return rolUsuario;
}
public RolUsuario removeRolUsuario(RolUsuario rolUsuario) {
getRolUsuarios().remove(rolUsuario);
rolUsuario.setUsuario(null);
return rolUsuario;
}
}
USER_ROLE
/**
* The persistent class for the rol_usuario database table.
*
*/
@Entity
@Table(name="rol_usuario")
@NamedQuery(name="RolUsuario.findAll", query="SELECT r FROM RolUsuario r")
public class RolUsuario implements Serializable {
private static final long serialVersionUID = 1L;
private int idRol_Usuario;
private Usuario usuario;
private Rol rol;
public RolUsuario() {
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getIdRol_Usuario() {
return this.idRol_Usuario;
}
public void setIdRol_Usuario(int idRol_Usuario) {
this.idRol_Usuario = idRol_Usuario;
}
//bi-directional many-to-one association to Usuario
@ManyToOne(fetch=FetchType.LAZY)
public Usuario getUsuario() {
return this.usuario;
}
public void setUsuario(Usuario usuario) {
this.usuario = usuario;
}
//bi-directional many-to-one association to Rol
@ManyToOne(fetch=FetchType.LAZY)
public Rol getRol() {
return this.rol;
}
public void setRol(Rol rol) {
this.rol = rol;
}
}
在我的项目中,我使用 EJB 为前端创建 POJO。当我询问给定用户的完整角色列表时,我应该如何去做:
- 使用 CrudRepository 创建一个 UserRole 存储库,方法如下
List<RolUsuario> findByUsuario(Usuario user); 将
UserRole的列表返回给我的User Service并查看 将每个角色提取到UserPOJO 的列表
发送到前端。
或者有什么方法可以直接在表UserRole 中获得Roles 的列表,其中User(Id?) = something?
这对我来说很难描述。我的应用只关心用户的角色,而不关心映射表实体,所以底线是我必须以某种方式获取它们,但我不知道从哪里开始。
任何指针都会非常有用。
编辑:
或者我可以...
- 为用户添加新角色创建 UserRole。
- 将 UserRole 添加到 User 内部的列表中。
- 要获取用户的角色,请改为获取 UserRolelist。
【问题讨论】:
-
一种选择是没有 UserRole 模型,而只有 User 和 Role。您可以指定是用户拥有角色列表,并在角色表中拥有用户列表。
-
这里是一个例子:mkyong.com/hibernate/…
-
问题是中间表可能有一天会自己变成一个实体。