Spring data jpa - UsersRepository Не найдено имя свойства для типа Users - PullRequest
1 голос
/ 03 апреля 2020

Привет всем, надеюсь, что вы в безопасности со всем, что происходит сейчас. Я борюсь с пружинными данными jpa нет свойства исключение

ошибка в том, что Spring не может найти пользователей при запуске приложения:

UsersRepository.findByName(java.lang.String)! No property name found for type Users!

вот мой код:

это мой users.java, который содержит все поля для базы данных

@Entity
@Table(name = "user")
public class Users {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "user_id")
    private int id;

    @Column(name = "login")
    private String userName;

    @Column(name = "password")
    private String password;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;

    public Users() {
    }

    public Users(Users users){

        this.id=users.getId();
        this.userName=users.getUserName();
        this.password=users.getPassword();
        this.roles=users.getRoles();
    }

    public int getId() {
        return id;
    }

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

    public String getUserName() { return userName; }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

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

    public Set<Role> getRoles() {
        return roles;
    }

    public void setRoles(Set<Role> roles) {
        this.roles = roles;
    }
}

это мой UsersRepository.java

@Repository
public interface UsersRepository extends JpaRepository<Users, Integer> {
    Optional<Users> findByName(String userName);
}

И наконец это MyUsersDetailsService.java

@Service
public class MyUserDetailsService implements UserDetailsService {

    @Autowired
    private UsersRepository usersRepository;

    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
       Optional<Users> optionalUsers = usersRepository.findByName(userName);

        optionalUsers
                .orElseThrow(() -> new UsernameNotFoundException(userName+"Utilisateur Introuvable!"));
        return optionalUsers
                .map(MyUserDetails::new).get();

    }
}

1 Ответ

3 голосов
/ 03 апреля 2020

Измените имя метода репозитория на

Optional<Users> findByUserName(String userName);

, поскольку у вас нет свойства с именем name.


Пара предложений:

  • Сохраните имя класса сущности как User вместо Users. (Класс сущности представляет одну запись в таблице, которая в основном является User)
  • Пусть переменная userName будет username. (если вы go с этим, то имя метода хранилища будет findByUsername.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...