I have error in my app, because I use findOne() method. Below my simple code. In User class my id is String email and that's id I'm trying to use in my class UserService like this :
public User findUser(String email){
return userRepository.findOne(email);
}
but I have this error:
method findOne in interface org.springframework.data.repository.query.QueryByExampleExecutor cannot be applied to given types;
required: org.springframework.data.domain.Example
found: java.lang.String
reason: cannot infer type-variable(s) S (argument mismatch; java.lang.String cannot be converted to org.springframework.data.domain.Example)
User class:
@Entity
@Data
@Table(name = "User")
public class User {
@Id
@Email
@NotEmpty
@Column(unique = true)
private String email;
@NotEmpty
private String name;
@NotEmpty
@Size(min = 5)
private String password;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Task> tasks;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "USER_ROLE", joinColumns = {
@JoinColumn(name = "USER_EMAIL", referencedColumnName = "email")
}, inverseJoinColumns = {@JoinColumn(name = "ROLE_NAME", referencedColumnName = "name")})
private List<Role> roles;
}
and UserRepository:
public interface UserRepository extends JpaRepository<User, String> {
}
Use findById or getOne instead of findOne when you want to search only by id.
public User findUser(String email){
return userRepository.getOne(email); // throws when not found or
// eventually when accessing one of its properties
// depending on the JPA implementation
}
public User findUser(String email){
Optional<User> optUser = userRepository.findById(email); // returns java8 optional
if (optUser.isPresent()) {
return optUser.get();
} else {
// handle not found, return null or throw
}
}
The function findOne()
receives a Example<S>
, this method is used to find by example, so you need to provide the example object and the fields to check.
You can find how to use the find by example.
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#query-by-example.matchers
But it is basically something like.
User user = new User();
person.setName("Dave");
ExampleMatcher matcher = ExampleMatcher.matching()
.withIgnorePaths("name")
.withIncludeNullValues()
.withStringMatcherEnding();
Example<User> example = Example.of(user, matcher);
I had something like it. Its because you are using a newer version.
You can fix it by:
return userRepository.findById(email).orElse(null);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With