Имеет ли Spring Data JPA какой-либо способ подсчета вопросов с использованием разрешения имени метода?

Spring Данные JPA поддерживают подсчет объектов с использованием спецификаций. Но есть ли способ подсчета объектов с использованием разрешения имени метода? Скажем, мне нужен метод countByName для подсчета объектов с определенным именем, как метод findByName для извлечения всех объектов с определенным именем.

Ответ 1

По состоянию Spring Данные 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);
}

Ответ 2

Пока вы не используете версию 1.4, вы можете использовать явное аннотацию:

Пример:

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

Ответ 3

Эта функция была добавлена ​​в версию 1.4 M1

Ответ 4

По словам Абеля, после версии 1.4 (протестированной в версии 1.4.3.RELEASE) можно сделать так:

public long countByName (имя строки);

Ответ 5

Рабочий пример

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

Ответ 6

По-видимому, теперь он реализован DATAJPA-231

Ответ 7

Спасибо всем! Теперь это работает. DATAJPA-231

Было бы неплохо, если бы можно было создать счет... По... методам, как найти... По одним. Пример:

public interface UserRepository extends JpaRepository<User, Long> {

   public Long /*or BigInteger */ countByActiveTrue();
}

Ответ 8

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

Ответ 9

Я работаю с ним всего несколько недель, но я не считаю, что это строго возможно, но вы должны получить тот же эффект с меньшими усилиями; просто напишите запрос самостоятельно и аннотируйте имя метода. Это, вероятно, не намного проще, чем писать метод самостоятельно, но он чище, на мой взгляд.

Ответ 10

В соответствии с вопросом DATAJPA-231 эта функция еще не реализована.