web-dev-qa-db-ja.com

SpringデータCrudRepositoryが存在します

CrudRepositoryインターフェイスを拡張すると、サブインターフェイスにexists(ID)メソッドがあります。 _findBy<property>_メソッドを書くことができます。

booleanを返す_existBy<property>_メソッドを何らかの方法で記述することは可能ですか?または、@Query(jpa query)で注釈を付けて、booleanを返すようにします。

select count(*)を実行してlongを返すことができることはわかっていますが、サービス層で_!=0_チェックを実行する必要があります。

27

@Oleksandrの答えは正しいですが、私がそれを機能させることができる唯一の方法は次のとおりです。 PostgreSQLでEclipselinkを使用しています。

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

実際には、次のようなケース式を使用できます。

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

Spring Data JPAの時点で1.11.0.RELEASE、メソッド名からのクエリ派生でexistsを使用できるようになりました。たとえば、Userプロパティを持つemailエンティティがある場合、これを実行できます。

public interface UserRepository extends JpaRepository<User, Long> {

    boolean existsByEmail(String email);
}
12
Jacob Wallace

org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID)のソースを見ると、TypedQueryを使用してレコードをカウントして返すことがわかります。

_query.getSingleResult() == 1
_

existsBy(...)メソッドに対して同様のことを行うクエリを作成できます。

2
Rich Cowin