Optional<User> findByUsername(String userName) create me error creating bean with name

JavaGolf :

I have an error when using in UserRepository

Optional <User> findByUsername (String userName);

my error

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDetailsServiceImpl' defined in file [/Users/Piotr/Documents/Repository/xxx/xxx/target/classes/com/xxx/xx/services/UserDetailsServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.xxxxx.xxx.repositories.UserRepository.findByUsername(java.lang.String)! Unable to locate Attribute  with the the given name [username] on this ManagedType [com.xxxx.xxxx.models.User]
    at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:228) ~[spring-beans-5.2.4.RELEASE.jar:5.2.4.RELEASE]
    at org.springframework.be



@Entity
public class User implements UserDetails {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String userName;
    private String lastName;
    private String password;
    private String role;

    public User() {
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return userName;
    }

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

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

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

    public String getRole() {
        return role;
    }

    public void setRole(String role) {
        this.role = role;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        return Collections.singleton(new SimpleGrantedAuthority(role));
        //ToDo Zmiana kolekcji, użytkownik może miec dwie role albo uzyć dwóch zmiennych z falgami
    }

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

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

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

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

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

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

UserRepository

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

   Optional<User> findByUsername(String userName);

}

UserDtailsServiceImpl

@Service public class UserDetailsServiceImpl implements UserDetailsService {

private UserRepository userRepository;

public UserDetailsServiceImpl(UserRepository userRepository) {
    this.userRepository = userRepository;
}

@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
    // todo throw if not exist
    return userRepository.findByUsername(s).get();
}

}

pvpkiran :

The method name should be findByUserName in the repository and not findByUsername

@Repository
public interface UserRepository extends JpaRepository<User, Long> {

   Optional<User> findByUserName(String userName);

}

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=385281&siteId=1