Spring Data JPA有没有办法使用方法名称parsing来计数实体?

Spring Data JPA支持使用规范来计数实体。 但它有什么办法来计数实体使用方法名称parsing? 比方说,我想要一个方法countByName来计算具有特定名称的实体,就像方法findByName来获取具有特定名称的所有实体。

Spring Data 1.7.1.RELEASE开始,你可以用两种不同的方法来完成,

1) 新的方式 ,使用查询派生计数和删除查询。 阅读这个 ,(例5)。 例,

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

2) 旧的方式 ,使用@Query注释。
例,

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

或者使用@Param注解,

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

只要你不使用1.4版本,你可以使用明确的注释:

例:

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

该function已添加到版本1.4 M1中

根据Abel的说法,在版本1.4(版本1.4.3.RELEASE中testing)之后可以这样做:

public long countByName(String name);

工作示例

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

从DAO层调用

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

显然它现在被执行DATAJPA-231

谢谢大家! 现在是工作。 DATAJPA-231

这将是很好,如果有可能创build计数…通过…方法就像find…由一个。 例:

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

JpaRepository也扩展了QueryByExampleExecutor。 所以你甚至不需要在你的界面上定义自定义的方法:

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

然后像这样查询:

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

我只用了几个星期,但我不相信这是完全可能的,但是你应该可以用更多的努力得到同样的效果。 只需自己编写查询并注释方法名称即可。 这可能并不比自己写这个方法简单得多,但是在我看来这是更清洁的。

根据问题DATAJPA-231该function尚未实现。