2012-08-29 19 views
23

जब मैं CrudRepository इंटरफ़ेस का विस्तार करता हूं, तो मेरे उपनिवेश में exists(ID) विधि है। मैं findBy<property> विधियों को लिख सकता हूं।वसंत डेटा CrudRepository मौजूद है

क्या existBy<property> विधि लिखना संभव है boolean वापस लौटाएगा। या इसे @Query(jpa query) के साथ एनोटेट करने के लिए, तो यह boolean वापस आ जाएगा।

मुझे पता है कि मैं select count(*) कर सकता हूं और long वापस कर सकता हूं, लेकिन फिर मुझे !=0 मेरी सेवा परत में जांच करनी होगी।

+1

"लेकिन फिर मैं क्या करना होगा मेरी सेवा परत में = 0 की जांच!।" गिनती के बजाय अस्तित्व का उपयोग करना डीबी क्वेरी – WeGa

उत्तर

2

आप org.springframework.data.jpa.repository.support.SimpleJpaRepository.exists(ID) के लिए स्रोत को देखें, तो फिर तुम कि यह एक TypedQuery का उपयोग करता रिकॉर्ड और रिटर्न की गणना करने के देखेंगे:

query.getSingleResult() == 1 

आप एक प्रश्न है कि आपके existsBy(...) तरीकों के लिए कुछ ऐसा ही बना सकते हैं।

+1

हाँ के लिए थोड़ा और अधिक कुशल होगा, मैंने सोर्स कोड में देखा। तब तक मुझे अपने दाओ इंटरफेस को लागू करना होगा। मैं समाधान की तलाश में था जब मुझे ऐसा करने की ज़रूरत नहीं है =) –

19

वास्तव में आप इस तरह के मामले अभिव्यक्ति का उपयोग कर सकते हैं:

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

@ ऑलेक्ज़ेंडर का जवाब सही है, लेकिन एक ही तरीका है कि मैं यह काम करने के लिए मिल सकता है इस प्रकार है। मैं 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); 
} 
+0

यह v1.11.0 से पहले स्प्रिंग डेटा के लिए एक अच्छा कामकाज है। @ alexander-camperov कृपया इस उत्तर को स्वीकार करें यदि आप सहमत हैं कि यह आपकी समस्या का समाधान करता है। – naXa

9

स्प्रिंग डाटा जेपीए 1.11.0.RELEASE के रूप में, आप अब exists विधि के नाम से क्वेरी व्युत्पत्ति के साथ उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप एक email संपत्ति के साथ एक User इकाई है, तो आप ऐसा कर सकते हैं:

public interface UserRepository extends JpaRepository<User, Long> { 

    boolean existsByEmail(String email); 
} 
+0

ऐसा लगता है कि 'अस्तित्व में है' अब तक टूट गया है: सी https://jira.spring.io/browse/DATAJPA-851 –

संबंधित मुद्दे