【问题标题】:Use Enum for user role使用枚举作为用户角色
【发布时间】:2020-06-12 21:45:08
【问题描述】:

我有这个用户和角色的实体:

@Entity
@Table(name="test")
public class Test implements Serialazable {
    ....
    @Column(length = 25)
    private String role;
    ..... 
}

我想用这个 Enum 来保存可用的类型:

public enum Role implements GrantedAuthority {
  ROLE_ADMIN, ROLE_CLIENT;

  public String getAuthority() {
    return name();
  }

}

问题是我如何使用这个 Enum 来插入选定的当前角色,以及从数据库中获取值并填充 Enum。

你指导我如何实现这个,因为我不是很清楚吗?

【问题讨论】:

  • 所以你想在运行时填充一个枚举?我怀疑这是一个好主意,因为枚举应该是静态的。
  • 在我的情况下,我有固定的角色类型。

标签: java hibernate jpa enums spring-data-jpa


【解决方案1】:

我给你举个例子,你需要:

  • 创建一个枚举类
  • 创建一个转换器:

    @Converter(autoApply = true)
    public class RoleConverter implements AttributeConverter<Role, String> {
    
        @Override
        public String convertToDatabaseColumn(Role role) {
            return role.getRoleName();
        }
    
        @Override
        public Role convertToEntityAttribute(String dbData) {
            return Role.getFromShortName(dbData);
        }
    }
    

持久性提供者将完成其余的工作。

【讨论】:

    【解决方案2】:

    在 JPA 中将枚举值映射到其数据库表示和从其数据库表示映射的最常见选项是使用 @Enumerated 注释。这样,我们可以指示 JPA 提供者将枚举转换为其序数或字符串值。

    这篇文章可以帮助你。

    https://www.baeldung.com/jpa-persisting-enums-in-jpa

    【讨论】:

      猜你喜欢
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2021-05-14
      • 2011-04-12
      • 2021-04-23
      相关资源
      最近更新 更多