User findByToken(String token); Long countByLastname(String lastname); Stream<User> readByEmail(String email); Long deleteByLastname(String lastname); List<Item> findFirst10ByLastname(String lastname, Sort sort); List<Item> findTop3ByLastname(String lastname, Sort sort);
Słowo kluczowe | Przykład | Tłumaczenie na JPQL |
And | findByLastnameAndFirstname | … where x.lastname = ?1 and x.firstname = ?2 |
Or | findByLastnameOrFirstname | … where x.lastname = ?1 or x.firstname = ?2 |
Is,Equals | findByFirstname, findByFirstnameIs,findByFirstnameEquals |
… where x.firstname = ?1 |
Between | findByStartDateBetween | … where x.startDate between ?1 and ?2 |
LessThan | findByAgeLessThan | … where x.age < ?1 |
LessThanEqual | findByAgeLessThanEqual | … where x.age <= ?1 |
GreaterThan | findByAgeGreaterThan | … where x.age > ?1 |
GreaterThanEqual | findByAgeGreaterThanEqual | … where x.age >= ?1 |
After | findByStartDateAfter | … where x.startDate > ?1 |
Before | findByStartDateBefore | … where x.startDate < ?1 |
IsNull | findByAgeIsNull | … where x.age is null |
IsNotNull,NotNull | findByAge(Is)NotNull | … where x.age not null |
Like | findByFirstnameLike | … where x.firstname like ?1 |
NotLike | findByFirstnameNotLike | … where x.firstname not like ?1 |
StartingWith | findByFirstnameStartingWith | … where x.firstname like ?1 |
EndingWith | findByFirstnameEndingWith | … where x.firstname like ?1 |
Containing | findByFirstnameContaining | … where x.firstname like ?1 |
OrderBy | findByAgeOrderByLastnameDesc | … where x.age = ?1 order by x.lastname desc |
Not | findByLastnameNot | … where x.lastname <> ?1 |
In | findByAgeIn(Collection<Age> ages) | … where x.age in ?1 |
NotIn | findByAgeNotIn(Collection<Age> ages) | … where x.age not in ?1 |
True | findByActiveTrue() | … where x.active = true |
False | findByActiveFalse() | … where x.active = false |
IgnoreCase | findByFirstnameIgnoreCase | … where UPPER(x.firstame) = UPPER(?1) |
public interface UserRepository extends JpaRepository<User, Long> { ... User findByToken(String token); ... }
@Service
public class UserServiceImpl implements UserService {
private UserRepository userRepository;
...
@Autowired
public UserServiceImpl(UserRepository userRepository, EmailSender emailSender, MD5Encoder ...) {
this.userRepository = userRepository;
...
}
@Override
public NewPasswordResponseDTO saveNewPassword(NewPasswordRequestDTO newPasswordRequestDTO)
throws Exception {
User user = userRepository.findByToken(newPasswordRequestDTO.getToken());
validate(user, "Token is ivalid or expired");
...
return newPasswordResponseDTO;
}
}
User findByEmail(String email);na:
User findByFirstName(String firstName);
Caused by: javax.persistence.NonUniqueResultException: result returns more than one elements at org.hibernate.jpa.internal.QueryImpl.getSingleResult(QueryImpl.java:539) at org.hibernate.jpa.criteria.compile.CriteriaQueryTypeQueryAdapter.getSingleResult(CriteriaQueryTypeQueryAdapter.java:54) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.orm.jpa.SharedEntityManagerCreator$DeferredQueryInvocationHandler.invoke(SharedEntityManagerCreator.java:375) at com.sun.proxy.$Proxy115.getSingleResult(Unknown Source) at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:210)
List<User> findByFirstName(String firstName);