2014-04-24 6 views
8

दिए गए ट्रंकेट/हटाएं मेरे पास एक विधि के माध्यम से मेरी इकाई कक्षा उपलब्ध है। मैं यह पता लगाने की कोशिश कर रहा हूं कि जेपीए जेपीक्यूएल या मानदंड एपीआई के माध्यम से मैं एक छंटनी जारी कर सकता हूं या हटा सकता हूं। मुझे लगता है कि मानदंड एपीआई कक्षाओं के साथ काम करने के लिए अधिक प्राकृतिक है, और छंटनी एक तेज ऑपरेशन है इसलिए इन्हें पसंद किया जाता है। यह वही है जो मैंने अब तक रखा है, लेकिन यह सुनिश्चित नहीं है कि इसके बारे में क्या जोड़ना/बदलना है।इकाई वर्ग

CriteriaBuilder cb = this._em().getCriteriaBuilder(); 
    cb.createQuery(_entityClass()).from(_entityClass()); 

ध्यान दें: _entityClass रिटर्न MyEntity.class, मैं MyEntity इस के लिए कोई अन्य संदर्भ एक अधिक सामान्य कार्यान्वयन है।

+0

मुझे लगता है कि जेपीक्यूएल में 'ट्रंकेट' जैसी कोई चीज़ नहीं है, आप इसके लिए मूल क्वेरी लिख सकते हैं या जेपीक्यूएल "डिलीट" का उपयोग कर सकते हैं। –

उत्तर

12

यह मानते हुए कि MyEntity तालिका को संदर्भित करता है क्या आप इस प्रकार आगे बढ़ सकते हैं ड्रॉप करना चाहते हैं:

// Criteria API (JPA 2.1 and above) 
CriteriaBuilder builder = em.getCriteriaBuilder(); 
CriteriaDelete<MyEntity> query = builder.createCriteriaDelete(MyEntity.class); 
query.from(MyEntity.class); 
em.createQuery(query).executeUpdate(); 

या एक सामान्यीकृत दृष्टिकोण के साथ:

public <T> int deleteAllEntities(Class<T> entityType) { 
    CriteriaBuilder builder = em.getCriteriaBuilder(); 
    CriteriaDelete<T> query = builder.createCriteriaDelete(entityType); 
    query.from(entityType); 
    return em.createQuery(query).executeUpdate(); 
} 


इसी JPQL/SQL के लिए प्रश्न:

// JPQL 
em.createQuery("DELETE FROM MyEntity e").executeUpdate(); 

// SQL 
em.createNativeQuery("TRUNCATE TABLE MyEntity").executeUpdate(); 

या एक सामान्यीकृत दृष्टिकोण के साथ:

public static <T> int deleteAllEntities(Class<T> entityType) { 
    String query = new StringBuilder("DELETE FROM ") 
          .append(entityType.getSimpleName()) 
          .append(" e") 
          .toString(); 
    return em.createQuery(query).executeUpdate(); 
} 

public static <T> int truncateTable(Class<T> entityType) { 
    String query = new StringBuilder("TRUNCATE TABLE ") 
          .append(entityType.getSimpleName()) 
          .toString();   
    return em.createNativeQuery(query).executeUpdate(); 
} 

मानदंड एपीआई के साथ आप केवल, का चयन करें, अद्यतन का उपयोग कर सकते बयान DELETE इसलिए TRUNCATE संभव नहीं है।

+0

जिज्ञासा बना सकते हैं * कक्षा से काम करने के लिए क्वेरी बनाई जा सकती है? – xenoterracide

+0

"कक्षा_ से काम करने के लिए" क्या मतलब है? क्या आप इस सवाल को विस्तृत कर सकते हैं? – wypieprz

+0

मेरे पास 'MyEntity.class' का संदर्भ है, मेरे पास स्ट्रिंग '" मायइन्टिटी "नहीं है, वास्तव में मैंने इसे उत्परिवर्तित किया ताकि' मानदंड हटाएं 'केवल एक कलाकार' (मानदंड डिलीट) है क्योंकि यह मुझे पसंद नहीं आया इसे 'ईएनटीटीआई' – xenoterracide

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