Est-ce que Spring Data JPA a un moyen de compter les entités en utilisant le nom de la méthode résoudre?
Spring Data JPA prend en charge les entités de comptage selon les spécifications. Mais a-t-il un moyen de compter des entités en utilisant le nom de la méthode resolving? Disons que je veux une méthode countByName
pour compter les entités avec un nom spécifique, tout comme une méthode findByName
pour récupérer toutes les entités avec un nom spécifique.
11 réponses
à partir de données de printemps 1.7.1.LIBÉRATION vous pouvez le faire de deux manières différentes,
1) Le new way , en utilisant la dérivation de requête à la fois compter et supprimer des requêtes. Lisez et , (exemple 5). Exemple,
public interface UserRepository extends CrudRepository<User, Integer> {
Long countByName(String name);
}
2) La old way , en utilisant L'annotation @Query.
Exemple,
public interface UserRepository extends CrudRepository<User, Integer> {
@Query("SELECT COUNT(u) FROM User u WHERE u.name=?1")
Long aMethodNameOrSomething(String name);
}
ou en utilisant aussi @param annotation,
public interface UserRepository extends CrudRepository<User, Integer> {
@Query("SELECT COUNT(u) FROM User u WHERE u.name=:name")
Long aMethodNameOrSomething(@Param("name") String name);
}
Vérifier cette sorte de réponse .
aussi longtemps que vous n'utilisez pas la version 1.4, vous pouvez utiliser l'annotation explicite:
exemple:
@Query("select count(e) from Product e where e.area.code = ?1")
int countByAreaCode(String code);
selon Abel, après la version 1.4 (testée dans la version 1.4.3.
publics à long countByName(String nom);
JpaRepository étend également QueryByExampleExecutor. Donc, vous n'avez même pas besoin de définir des méthodes personnalisées sur votre interface:
public interface UserRepository extends JpaRepository<User, Long> {
// no need of custom method
}
et puis requête comme:
User probe = new User();
u.setName = "John";
long count = repo.count(Example.of(probe));
exemple pratique
@Repository
public interface TenantRepository extends JpaRepository< Tenant, Long > {
List<Tenant>findByTenantName(String tenantName,Pageable pageRequest);
long countByTenantName(String tenantName);
}
appel de la couche DAO
@Override
public long countByTenantName(String tenantName) {
return repository.countByTenantName(tenantName);
}
merci à tous! Maintenant, c'est le travail. DATAJPA-231
il serait bien si était possible de créer count...By ... des méthodes comme find...By les uns. Exemple:
public interface UserRepository extends JpaRepository<User, Long> {
public Long /*or BigInteger */ countByActiveTrue();
}
Je n'ai travaillé avec elle que depuis quelques semaines mais je ne crois pas que ce soit strictement possible mais vous devriez être en mesure d'obtenir le même effet avec un peu plus d'effort; il suffit d'écrire la requête vous-même et annoter le nom de la méthode. Ce n'est probablement pas beaucoup plus simple que d'écrire la méthode vous-même, mais il est plus propre à mon avis.
en Fonction de la problématique DATAJPA-231 la fonctionnalité n'est pas encore mis en œuvre.
@Autowired
private UserRepository userRepository;
@RequestMapping("/user/count")
private Long getNumberOfUsers(){
return userRepository.count();
}