Printemps de données CrudRepository existe

Quand j'étends CrudRepository interface, j'ai exists(ID) méthode dans mon subinteface. Je peux écrire findBy<property> méthodes.

Est ce que c'est possible d'écrire existBy<property> méthode qui reviendra boolean. Ou à l'annoter avec @Query(jpa query) de sorte qu'il sera de retour boolean.

je sais que je peux faire select count(*) et retour long, mais alors je vais devoir faire un !=0 Vérifiez ma couche service.

25
demandé sur dur 2012-08-29 20:50:28
la source

4 ответов

en Fait, vous pouvez utiliser l'expression case comme ceci:

select case when count(e) > 0 then true else false end from Entity e
where e.property = ?1 -- here go your conditions
20
répondu Oleksandr Bondarenko 2012-08-31 22:35:31
la source

la réponse [email protected] est correcte, mais la seule façon que j'ai pu la faire fonctionner est la suivante. J'utilise Eclipselink sur 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);
}
20
répondu Adam 2014-11-26 21:08:51
la source

selon les données du printemps JPA 1.11.0.RELEASE, vous pouvez maintenant utiliser exists avec dérivation de requête à partir des noms de méthode. Par exemple, si vous avez un User entité email propriété, vous pouvez faire ceci:

public interface UserRepository extends JpaRepository<User, Long> {

    boolean existsByEmail(String email);
}
11
répondu Jacob Wallace 2017-04-20 05:56:47
la source

si vous regardez la source pour org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID) ensuite, vous verrez qu'il utilise un TypedQuery pour compter le nombre d'enregistrements et renvoie:

query.getSingleResult() == 1

vous pouvez créer une requête qui fait quelque chose de similaire pour votre existsBy(...) méthodes.

2
répondu Rich Cowin 2012-08-29 21:35:16
la source

Autres questions sur