java - Hibernate:如何映射到静态表?

标签 java mysql hibernate join mapping

我有角色和权限表以及使用注释的连接表 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,请自行选择。

所以基本思路是:

  1. 在数据库中创建表 User 和 SystemRole,并将条目添加到静态表 SystemRole。

  2. 确保 SystemRole 没有构造函数来实例化任何 Role。

  3. 每当您想将任何角色与用户相关联时,只需使用一种方法,该方法将输入作为用户名并返回 UserRole 对象。 只需使用查询来检索这些详细信息,我没有在此处添加这些详细信息,因为我使用的是使用 CrudRepository 的 Springboot 应用程序。

  4. 最后确保依赖项 (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/

相关文章:

java - 将字符串拆分为相等的部分(java/groovy)

java - 我可以从多个线程中的 ArrayList 获取迭代器并安全地使用它们吗?

java - java读取文本文件并将数字存储在不同的数组中

hibernate - Intellij Hibernate 实体生成配置

postgresql - 从 Spring Boot 1.5 升级到 2.0 - 无法在只读事务中执行更新

Java初学者: cost of threading over serial

mysql - 如何在 TRUE 或 FALSE 之间随机选择?

mysql - 使用sequelize遍历多个表

php - MySQL 将不接受带有 varchar、tinytext、时间、时间值的 INSERT INTO 表

c# - nHibernate Distinct 和分页的问题