복붙노트

[SPRING] Spring Data JPA는 메소드 이름 해석을 사용하여 엔티티를 셀 수있는 방법이 있습니까?

SPRING

Spring Data JPA는 메소드 이름 해석을 사용하여 엔티티를 셀 수있는 방법이 있습니까?

스프링 데이터 JPA는 사양을 사용하여 엔티티 계산을 지원합니다. 그러나 메소드 이름 해석을 사용하여 엔티티를 셀 수있는 방법이 있습니까? 특정 이름의 모든 엔티티를 가져 오는 findByName 메소드와 마찬가지로 countByName 메소드가 특정 이름을 가진 엔티티를 계산하도록합니다.

해결법

  1. ==============================

    1.Spring Data 1.7.1.RELEASE에서는 두 가지 방법으로 할 수 있습니다.

    Spring Data 1.7.1.RELEASE에서는 두 가지 방법으로 할 수 있습니다.

    1) 카운트 및 삭제 쿼리에 대해 쿼리 파생을 사용하는 새로운 방식 이것을 읽으십시오 (예제 5). 예,

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

    2) 옛 방식, Using @Query annotation. 예,

    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);
    }
    

    이것도 확인하십시오.

  2. ==============================

    2.1.4 버전을 사용하지 않는 한 명시 적 주석을 사용할 수 있습니다.

    1.4 버전을 사용하지 않는 한 명시 적 주석을 사용할 수 있습니다.

    예:

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

    3.이 기능은 버전 1.4 M1에 추가되었습니다.

    이 기능은 버전 1.4 M1에 추가되었습니다.

  4. ==============================

    4.또한 JpaRepository는 QueryByExampleExecutor를 확장합니다. 따라서 인터페이스에서 사용자 정의 메소드를 정의 할 필요조차 없습니다.

    또한 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));
    
  5. ==============================

    5.Abel에 따르면 1.4 버전 (1.4.3.RELEASE 버전에서 테스트 됨) 이후에는 다음과 같은 방법으로 가능합니다.

    Abel에 따르면 1.4 버전 (1.4.3.RELEASE 버전에서 테스트 됨) 이후에는 다음과 같은 방법으로 가능합니다.

    public long countByName (String name);

  6. ==============================

    6.실례

    실례

    @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);
    }
    
  7. ==============================

    7.분명히 지금 구현됩니다 DATAJPA-231

    분명히 지금 구현됩니다 DATAJPA-231

  8. ==============================

    8.다 감사합니다! 이제는 일이야. DATAJPA-231

    다 감사합니다! 이제는 일이야. DATAJPA-231

    카운트를 생성하는 것이 가능하면 좋을 것입니다. 예:

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

    9.나는 단지 몇 주 동안 그것으로 일해 왔지만, 이것은 엄격하게 가능하다고는 생각하지 않지만 조금 더 노력하더라도 똑같은 효과를 얻을 수 있어야합니다. 그냥 직접 쿼리를 작성하고 메소드 이름에 주석을 달아주세요. 그것은 아마 직접 메서드를 작성하는 것보다 훨씬 간단하지 않지만 내 의견으로는 더 깨끗합니다.

    나는 단지 몇 주 동안 그것으로 일해 왔지만, 이것은 엄격하게 가능하다고는 생각하지 않지만 조금 더 노력하더라도 똑같은 효과를 얻을 수 있어야합니다. 그냥 직접 쿼리를 작성하고 메소드 이름에 주석을 달아주세요. 그것은 아마 직접 메서드를 작성하는 것보다 훨씬 간단하지 않지만 내 의견으로는 더 깨끗합니다.

  10. ==============================

    10.DATAJPA-231 문제에 따르면이 기능은 아직 구현되지 않았습니다.

    DATAJPA-231 문제에 따르면이 기능은 아직 구현되지 않았습니다.

  11. ==============================

    11.

    @Autowired
    private UserRepository userRepository;
    
    @RequestMapping("/user/count")
    private Long getNumberOfUsers(){
        return userRepository.count();
    }
    
  12. from https://stackoverflow.com/questions/10696490/does-spring-data-jpa-have-any-way-to-count-entites-using-method-name-resolving by cc-by-sa and MIT license