我有角色和权限表以及使用注释的连接表 role_permission:
@OneToMany
@JoinTable(name="ROLE_PERMISSION", joinColumns=@JoinColumn(name="role_id"),
inverseJoinColumns=@JoinColumn(name="permission_id"))
ROLE ROLE_PERMISSION PERMISSION (Static)
-------- ----------- --------
id ------------------ role_id
rolename permission_id ----- id
description permission_name
--------- ---------- --------
问题是,权限已经填满了记录,应该是只读的。
如何在没有其他对象且无需将数据存储在静态权限表中的情况下填充 ROLE_PERMISSION 连接表?
非常感谢专家的建议。
最佳答案
这就是我的实现方式,如果你想要 OnetoMany 依赖或 ManyToMany 依赖 User-> Role,请自行选择。
所以基本思路是:
在数据库中创建表 User 和 SystemRole,并将条目添加到静态表 SystemRole。
确保 SystemRole 没有构造函数来实例化任何 Role。
每当您想将任何角色与用户相关联时,只需使用一种方法,该方法将输入作为用户名并返回 UserRole 对象。 只需使用查询来检索这些详细信息,我没有在此处添加这些详细信息,因为我使用的是使用 CrudRepository 的 Springboot 应用程序。
最后确保依赖项 (manytomany/onetoMany) 没有级联类型,因为 Systemrole 已经保存。
用户.java:
import java.util.Set;
import javax.persistence.*;
@Entity
@Table(name = "User")
public class User {
public User() {
}
public User(String name, Set<SystemRole> roles) {
this.name = name;
this.roles = roles;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private boolean enabled;
@ManyToMany
private Set<SystemRole> roles;
public Set<SystemRole> getRoles() {
return roles;
}
public void setRoles(Set<SystemRole> roles) {
this.roles = roles;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Transient
public boolean isEnabled() {
return enabled;
}
@Column(name = "ENABLED")
public int isEnabledasInt() {
return enabled ? 1 : 0;
}
public void setEnabled(int enabled) {
this.enabled = (1 == enabled) ? true : false;
}
}
系统角色.java :
package com.spring.security.model;
import javax.persistence.*;
@Entity
@Table(name = "System_Role")
public class SystemRole {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
private SystemRole() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof SystemRole)) return false;
SystemRole that = (SystemRole) o;
if (getId() != that.getId()) return false;
return getName().equals(that.getName());
}
@Override
public int hashCode() {
int result = getId();
result = 31 * result + getName().hashCode();
return result;
}
}
关于java - Hibernate:如何映射到静态表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21136117/