Reputation: 29
I am getting the following error and I am getting frustrated btw. Please help.
This is the Error I am getting:
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository' defined in com.oetr.ticketsysback.ticketsys_back.repository.UserRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract com.oetr.ticketsysback.ticketsys_back.entity.User com.oetr.ticketsysback.ticketsys_back.repository.UserRepository.findByUsername(java.lang.String)! Unable to locate Attribute with the the given name [username] on this ManagedType [com.oetr.ticketsysback.ticketsys_back.entity.User]
This is my User Entity:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "users_id")
private int users_id;
@Column(name = "users_firstname")
private String users_firstname;
@Column(name = "users_lastname")
private String users_lastname;
@Column(name = "users_username")
private String users_username;
@Column(name = "users_password")
private String users_password;
public User(String firstname, String name, String username, String password) {
this.users_firstname = firstname;
this.users_lastname = name;
this.users_username = username;
this.users_password = password;
}
public String getFirstname() {
return users_firstname;
}
public String getLastname() {
return users_lastname;
}
public String getUsername() {
return users_username;
}
public String getPassword() {
return users_password;
}
public int getId() {
return users_id;
}
}
This is my UserRepository
:
public interface UserRepository extends JpaRepository<User, Integer> {
User findByUsername(String username);
}
And this is my UserController
:
@RestController
@CrossOrigin
public class UserController {
@Autowired
private JwtUtil jwtUtil;
@Autowired
private AuthenticationManager authenticationManager;
//@Autowired
//private PasswordEncoder passwordEncoder;
@Autowired
private UserRepository userRepository;
@PostMapping("/authenticate")
public ResponseEntity<?> authUser(@RequestBody AuthRequest authRequest) throws Exception {
try {
authenticationManager.authenticate(new UsernamePasswordAuthenticationToken(authRequest.getUsername(), authRequest.getPassword()));
} catch (Exception ex) {
throw new Exception("invalid username or password");
}
final String jwt = jwtUtil.generateToken(authRequest.getUsername());
final long expiration = jwtUtil.extractExpiration(jwt).getTime();
int userid = userRepository.findByUsername(authRequest.getUsername()).getId();
return ResponseEntity.ok(new AuthenticationResponse(jwt, expiration, userid));
}
}
How can I solve this problem? Let me know if you need more.
Upvotes: 0
Views: 3515
Reputation: 2684
You should remove prefix: "users_" for fields, because in spring-data underscore symbol is used for making link on nested entities in repository method names. For example see: Spring data, find by property of a nested object
Upvotes: 3