gpt4 book ai didi

spring-boot - “基本”属性类型不应是容器;对于基于属性的访问,setter 和 getter 都应存在

转载 作者:行者123 更新时间:2023-12-04 13:00:56 25 4
gpt4 key购买 nike

我是 Spring Boot 的新手。
我尝试使用 Spring Security 和 Hibernate 来实现登录和注册功能。

首先,我使用 Hibernate 从数据库生成持久化映射实体类。而我需要在 UserEntity 类中实现 UserDetails 接口(interface),但问题发生了。

我无法实现 UserDetails 中的方法。

当我尝试实现 getAuthorities 时发生错误。
这是错误信息。

“基本”属性类型不应是容器。
检查信息:此检查检查以下 JPA 规范错误:

  • 属性类型检查(集合、实体、可嵌入等)

  • 对于基于属性的访问,setter 和 getter 都应该存在
    检查信息:此检查检查以下 JPA 规范错误:
  • 为方法/字段配置了多个属性
  • 属性不能用于 Embeddable 对象(JPA 1.0)
  • 应在字段或属性 getter 上指定持久属性元数据
  • 对于基于属性的访问,setter 和 getter 都应该存在

  • 这是我的代码。
    package com.example.demo;

    import org.springframework.security.core.GrantedAuthority;
    import org.springframework.security.core.authority.SimpleGrantedAuthority;
    import org.springframework.security.core.userdetails.UserDetails;

    import javax.persistence.*;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.List;
    import java.util.Objects;

    @Entity
    @Table(name = "user", schema = "demo", catalog = "")
    public class UserEntity implements UserDetails {
    private String username;
    private String password;
    private String role;
    private String nickname;
    private String phone;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities(){
    String[] authorities=role.split(",");
    List<SimpleGrantedAuthority> authorityList=new ArrayList<>();
    for(String string:authorities)
    authorityList.add(new SimpleGrantedAuthority(string));
    return authorityList;
    }

    @Override
    public boolean isAccountNonExpired() {
    return true;
    }

    @Override
    public boolean isAccountNonLocked() {
    return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
    return true;
    }

    @Override
    public boolean isEnabled() {
    return true;
    }

    @Id
    @Column(name = "username", nullable = false, length = 16)
    @Override
    public String getUsername() {
    return username;
    }

    public void setUsername(String username) {
    this.username = username;
    }

    @Basic
    @Column(name = "password", nullable = true, length = 32)
    @Override
    public String getPassword() {
    return password;
    }

    public void setPassword(String password) {
    this.password = password;
    }

    @Basic
    @Column(name = "nickname", nullable = true, length = 32)
    public String getNickname() {
    return nickname;
    }

    public void setNickname(String nickname) {
    this.nickname = nickname;
    }

    @Basic
    @Column(name = "phone", nullable = true, length = 11)
    public String getPhone() {
    return phone;
    }

    public void setPhone(String phone) {
    this.phone = phone;
    }

    @Override
    public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    UserEntity that = (UserEntity) o;
    return Objects.equals(username, that.username) &&
    Objects.equals(password, that.password) &&
    Objects.equals(nickname, that.nickname) &&
    Objects.equals(phone, that.phone);
    }

    @Override
    public int hashCode() {
    return Objects.hash(username, password, nickname, phone);
    }
    }

    我创建了一个与 UserEntity 完全相同的类,实现了 UserDetails,问题就消失了。也许这有点愚蠢,但我已经尝试了很多次。我解决不了请帮忙。

    最佳答案

    试试 @OneToMany@Transient而不是 @Basic注释。

    关于spring-boot - “基本”属性类型不应是容器;对于基于属性的访问,setter 和 getter 都应存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57079433/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com