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.

74
demandé sur George Siggouroglou 2012-05-22 09:59:30

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 .

125
répondu George Siggouroglou 2018-01-31 14:43:34

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);
13
répondu Roman 2015-08-07 23:14:58

cette caractéristique a été ajoutée dans la version 1.4 M1

8
répondu Pastur 2013-05-13 09:00:00

selon Abel, après la version 1.4 (testée dans la version 1.4.3.

publics à long countByName(String nom);

5
répondu Marcos Nunes 2014-01-22 15:29:49

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));
5
répondu L. Holanda 2017-02-22 01:27:25

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);
}
4
répondu Sagar Misal 2017-07-17 15:12:02

apparemment, il est mis en œuvre maintenant DATAJPA-231

2
répondu chpopov 2013-05-16 14:39:45

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();
}
1
répondu Thanongsak Chamung 2016-11-03 05:27:51

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.

0
répondu Thevenin 2012-05-26 16:50:06

en Fonction de la problématique DATAJPA-231 la fonctionnalité n'est pas encore mis en œuvre.

0
répondu Oleksandr Bondarenko 2012-08-11 06:06:38
@Autowired
private UserRepository userRepository;

@RequestMapping("/user/count")
private Long getNumberOfUsers(){
    return userRepository.count();
}
0
répondu Богдан Ляховецкий 2018-05-07 19:26:27