CrudRepository
インターフェイスを拡張すると、サブインターフェイスにexists(ID)
メソッドがあります。 _findBy<property>
_メソッドを書くことができます。
boolean
を返す_existBy<property>
_メソッドを何らかの方法で記述することは可能ですか?または、@Query(jpa query)
で注釈を付けて、boolean
を返すようにします。
select count(*)
を実行してlong
を返すことができることはわかっていますが、サービス層で_!=0
_チェックを実行する必要があります。
@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);
}
実際には、次のようなケース式を使用できます。
select case when count(e) > 0 then true else false end from Entity e
where e.property = ?1 -- here go your conditions
Spring Data JPAの時点で1.11.0.RELEASE
、メソッド名からのクエリ派生でexists
を使用できるようになりました。たとえば、User
プロパティを持つemail
エンティティがある場合、これを実行できます。
public interface UserRepository extends JpaRepository<User, Long> {
boolean existsByEmail(String email);
}
org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID)
のソースを見ると、TypedQuery
を使用してレコードをカウントして返すことがわかります。
_query.getSingleResult() == 1
_
existsBy(...)
メソッドに対して同様のことを行うクエリを作成できます。