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核心原理剖析》