【问题标题】:Spring boot @ElementCollection: Unknown column 'user_roles' in 'field list'Spring boot @ElementCollection:“字段列表”中的未知列“user_roles”
【发布时间】:2021-07-11 14:21:06
【问题描述】:

我有一个简单的 Spring Boot 应用程序,我决定在那里添加 Spring Security 和角色。 这是我的用户类:

//different fields

@ElementCollection(targetClass = UserRole.class, fetch = FetchType.EAGER)
@CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"))
@Enumerated(EnumType.STRING)
private Set<UserRole> userRoles;

还有UserRole 枚举:

public enum UserRole implements GrantedAuthority {
    USER, ADMIN;

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

我有两张桌子

用户:

| id | name | pasword |
----------------------
|    |      |         |

用户角色:

| user_id |  user_role |
-----------------------
|         |            |

当我尝试创建新用户时,我得到:

Unknown column 'user_roles' in 'field list'

我认为它也应该向 user_roles 添加新记录。

【问题讨论】:

    标签: java spring spring-boot hibernate spring-security


    【解决方案1】:

    尝试添加@Column 以指定userRoles 的列名,使其与user_roles 集合表中的列名匹配:

    @ElementCollection(targetClass = UserRole.class, fetch = FetchType.EAGER)
    @CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"))
    @Enumerated(EnumType.STRING)
    @Column(name = "user_role")
    private Set<UserRole> userRoles;
    

    当未指定@Column 时,错误中显示的user_roles 名称可能是Hibernate 根据默认命名策略尝试查找的默认列名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-09
      • 2023-03-14
      相关资源
      最近更新 更多