Подтвердить что ты не робот

Spring данные CrudRepository существует

Когда я расширяю интерфейс CrudRepository, у меня есть метод exists(ID) в моем субинтерфейсе. Я могу написать методы findBy<property>.

Возможно ли каким-то образом написать метод existBy<property>, который вернет boolean. Или аннотировать его с помощью @Query(jpa query), чтобы он возвращал boolean.

Я знаю, что могу сделать select count(*) и вернуть long, но тогда мне нужно будет сделать !=0 проверку моего уровня обслуживания.

4b9b3361

Ответ 1

На самом деле вы можете использовать выражение case следующим образом:

select case when count(e) > 0 then true else false end from Entity e
where e.property = ?1 -- here go your conditions

Ответ 2

Ответ на

@Oleksandr верен, но единственный способ заставить его работать: Я использую Eclipselink для PostgreSQL.

public interface UserRepository extends JpaRepository<User, Long>
{
    @Query("SELECT CASE WHEN COUNT(u) > 0 THEN 'true' ELSE 'false' END FROM User u WHERE u.username = ?1")
    public Boolean existsByUsername(String username);
}

Ответ 3

Как и для Spring данных JPA 1.11.0.RELEASE, теперь вы можете использовать exists с выводом запроса из имен методов. Например, если у вас есть объект User с свойством email, вы можете сделать это:

public interface UserRepository extends JpaRepository<User, Long> {

    boolean existsByEmail(String email);
}

Ответ 4

Если вы посмотрите на источник для org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID), вы увидите, что он использует TypedQuery для подсчета записей и возврата:

query.getSingleResult() == 1

Вы можете создать запрос, который делает что-то похожее для ваших методов existsBy(...).