Spring boot @ElementCollection:“字段列表”中的未知列“user_roles”

Posted

技术标签:

【中文标题】Spring boot @ElementCollection:“字段列表”中的未知列“user_roles”【英文标题】:Spring boot @ElementCollection: Unknown column 'user_roles' in 'field list' 【发布时间】: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 添加新记录。

【问题讨论】:

【参考方案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 根据默认命名策略尝试查找的默认列名称。

【讨论】:

以上是关于Spring boot @ElementCollection:“字段列表”中的未知列“user_roles”的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Spring Boot 应用程序 pom 同时需要 spring-boot-starter-parent 和 spring-boot-starter-web?

《02.Spring Boot连载:Spring Boot实战.Spring Boot核心原理剖析》

spring-boot-quartz, 依赖spring-boot-parent

spring-boot系列:初试spring-boot

Spring-Boot Banner

Spring Boot:Spring Boot启动原理分析