Данные Spring: Не удалось определить тип для: java.util.List, для таблицы: user, для столбцов: [org.hibernate.mapping.Column (role)] - PullRequest
0 голосов
/ 29 июня 2018

Я новичок в Spring, и я следовал этому уроку Spring Rest Services

чтобы понять, как работает oAuth с REST API.

До этого мое приложение работало нормально.

При работе с учебником мне потребовалось, чтобы моя сущность User реализовала UserDetails. И мне пришлось добавить дополнительный List<String> roles, потому что он используется в моем UserDetailsImpl сервисе, который реализует UserDetailsService.

И теперь, когда я запускаю mvn spring-boot:run, я получаю сообщение об ошибке, упомянутое в заголовке.

Я посмотрел в Интернете, но большинство проблем было связано с ассоциациями таблиц через определенный столбец, но в моем коде нет типа сопоставления, сопоставленного столбцу roles.

Вот моя User сущность:

@Entity
public class User implements UserDetails {

    @Id
    private UUID id;

    private String name;
    private String email;
    private String password;
    private List<String> roles;

    public User (){

    }

    public User (String email, String name, String password, UUID id, List<String> roles){
        this.email = email;
        this.name = name;
        this.password = password;
        this.id = id;
        this.roles = roles;
    }

    public String getEmail() {
        return email;
    }

    public String getName() {
        return name;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return null;
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return email;
    }

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

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

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

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

    public UUID getId() {
        return id;
    }

    List<String> getRoles() {
        return roles;
    }

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

    public void setEmail(String email) {
        this.email = email;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setId(UUID id) {
        this.id = id;
    }

}

А это мой UserDetailsImp сервис:

@Service
public class UserDetailsImp implements UserDetailsService {

    @Autowired
    UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {

        User user = userRepository.getOneByEmail(email);
        UserBuilder builder = null;

        if( user != null){
            builder.username(user.getEmail()).password(user.getPassword()).roles(String.join("",user.getRoles()));
        } else {
            throw new UsernameNotFoundException("User not found");
        }
        return builder.build();
    }
}

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 29 июня 2018

Поле private List<String> roles имеет неизвестный тип в БД. Попробуйте использовать @ElementCollection аннотацию. https://docs.oracle.com/javaee/6/api/javax/persistence/ElementCollection.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...