2012-08-29 6 views
23

Wenn ich CrudRepository Schnittstelle erweitern, habe ich exists(ID) Methode in meinem Subinterface. Ich kann findBy<property> Methoden schreiben.Federdaten CrudRepository existiert

Ist es irgendwie möglich, existBy<property> Methode zu schreiben, die boolean zurückgibt. Oder um es mit @Query(jpa query) zu kommentieren, so wird es boolean zurückgeben.

Ich weiß, dass ich select count(*) tun und long zurückgeben kann, aber dann muss ich !=0 in meiner Service-Schicht überprüfen.

+1

„aber dann würde ich tun müssen = 0 check in meiner Dienstschicht!“. Auch mit exist anstelle von count wäre etwas effizienter für db-Abfrage – WeGa

Antwort

2

Wenn Sie an der Quelle sucht org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID) dann werden Sie sehen, dass es eine TypedQuery verwendet Aufzeichnungen und kehrt zu zählen:

query.getSingleResult() == 1 

Sie können eine Abfrage erstellen, die etwas ähnliches für Ihre existsBy(...) Methoden der Fall ist.

+1

yeah, sah ich im Quellcode. Bis dahin muss ich meine Dao-Schnittstelle implementieren. Ich suchte nach Lösung, wenn ich das nicht tun muss =) –

19

Eigentlich kann man case-Ausdruck wie folgt verwenden:

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

@ Oleksandr Antwort richtig ist, aber der einzige Weg, ich es bekommen könnte wie folgt funktionieren. Ich benutze Eclipselink auf 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); 
} 
+0

Es ist eine gute Abhilfe für Spring Data vor v1.11.0. @ alexander-camperov Bitte akzeptiere diese Antwort, wenn du zustimmst, dass sie dein Problem löst. – naXa

9

Ab Spring Data JPA 1.11.0.RELEASE, können Sie jetzt exists mit Abfrage Ableitung von Methodennamen verwenden. Zum Beispiel, wenn Sie eine User Einheit mit einer email Eigenschaft haben, können Sie dies tun:

public interface UserRepository extends JpaRepository<User, Long> { 

    boolean existsByEmail(String email); 
} 
+0

Es scheint, 'existsBy' ist jetzt gebrochen: C https://jira.spring.io/browse/DATAJPA-851 –

Verwandte Themen