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尚未实现。