springframework query org left jparepository example data java spring spring-data-jpa

java - query - spring data native sql



¿Spring Data JPA tiene alguna forma de contar entidades utilizando la resolución del nombre del método? (11)

¡Gracias a todos! Ahora es trabajo DATAJPA-231

Sería bueno si fuera posible crear recuento ... Por ... métodos como encontrar ... Por unos. Ejemplo:

public interface UserRepository extends JpaRepository<User, Long> { public Long /*or BigInteger */ countByActiveTrue(); }

Spring Data JPA admite contar entidades usando especificaciones. Pero, ¿tiene alguna forma de contar entidades usando la resolución del nombre del método? Digamos que quiero un método countByName para contar entidades con un nombre específico, como un método findByName para buscar todas las entidades con un nombre específico.


A partir de Spring Data 1.7.1.RELEASE puedes hacerlo de dos formas diferentes,

1) La nueva forma , usando la derivación de consulta para las consultas de conteo y eliminación. Lea this , (Ejemplo 5). Ejemplo,

public interface UserRepository extends CrudRepository<User, Integer> { Long countByName(String name); }

2) La forma antigua , usando la anotación @Query.
Ejemplo,

public interface UserRepository extends CrudRepository<User, Integer> { @Query("SELECT COUNT(u) FROM User u WHERE u.name=?1") Long aMethodNameOrSomething(String name); }

o usando la anotación @Param también,

public interface UserRepository extends CrudRepository<User, Integer> { @Query("SELECT COUNT(u) FROM User u WHERE u.name=:name") Long aMethodNameOrSomething(@Param("name") String name); }

Verifique también esto para responder .



Ejemplo de trabajo

@Repository public interface TenantRepository extends JpaRepository< Tenant, Long > { List<Tenant>findByTenantName(String tenantName,Pageable pageRequest); long countByTenantName(String tenantName); }

Llamando desde la capa DAO

@Override public long countByTenantName(String tenantName) { return repository.countByTenantName(tenantName); }


Esta característica se ha agregado en la versión 1.4 M1


JpaRepository también extiende QueryByExampleExecutor. Entonces, ni siquiera necesita definir métodos personalizados en su interfaz:

public interface UserRepository extends JpaRepository<User, Long> { // no need of custom method }

Y luego consultar como:

User probe = new User(); u.setName = "John"; long count = repo.count(Example.of(probe));


Según Abel, después de la versión 1.4 (probado en la versión 1.4.3.RELEASE) es posible hacerlo de esta manera:

public long countByName (String name);


Según el número DATAJPA-231 la función aún no está implementada.


Siempre que no uses la versión 1.4, puedes usar la anotación explícita:

ejemplo:

@Query("select count(e) from Product e where e.area.code = ?1") int countByAreaCode(String code);


Solo he estado trabajando con él durante algunas semanas, pero no creo que esto sea estrictamente posible; sin embargo, debería poder obtener el mismo efecto con un poco más de esfuerzo; solo escriba la consulta usted mismo y anote el nombre del método. Probablemente no sea mucho más simple que escribir el método usted mismo, pero es más limpio en mi opinión.


@Autowired private UserRepository userRepository; @RequestMapping("/user/count") private Long getNumberOfUsers(){ return userRepository.count(); }