2012-07-09 10 views
6

मैं कुछ डोमेन वस्तुओं है:स्प्रिंग डेटा डोमेन वस्तु विरासत और सामान्य तरीकों

@Entity 
public class Log { 

} 

@Entity 
public class LogLetter extends Log { 

} 

@Entity 
public class LogAction extends Log { 

} 

और मैं केवल एक भंडार जो मुझे लॉग के बच्चे को पाने के लिए अनुमति देता है करना चाहते हैं।

क्या मैं इस तरह से सैद्धांतिक रूप से कुछ कर सकता हूं?

List<LogLetter> logLetters = getLog(LogLetters.class); 

किसी अन्य दृष्टिकोण मौजूद मैं क्या वर्णित करने के लिए:

public interface LogRepository extends CrudRepository<Log, Long> { 

    @Query("select from ?1) 
    public <T> List<T> getLog(Class<T> clazz); 

} 

और इस विधि कहते हैं?

+0

आप क्यों नहीं बस 'LogLetterRepository' और' LogActionRepository' नहीं बनाएगा? वे सस्ते हैं और आपको मुफ्त में 'findAll' मिलता है। –

+1

ये दो डोमेन ऑब्जेक्ट्स केवल एक उदाहरण थे, वास्तव में मेरे पास इनमें से 15 ऑब्जेक्ट्स हैं और प्रत्येक डोमेन ऑब्जेक्ट के लिए नई रिपॉजिटरी बनाना बहुत ही सुरुचिपूर्ण नहीं है। –

उत्तर

2

मुझे नहीं लगता कि यह बॉक्स (विशेष रूप से तथ्य यह है कि आप from में पैरामीटर का उपयोग नहीं कर सकते हैं दी) से बाहर हो सकता है, लेकिन आप एक कस्टम विधि के रूप में इसे लागू कर सकते हैं (1.4. Custom implementations देखें):

public <T> List<T> getLog(Class<T> clazz) { 
    return em.createQuery("from " + clazz.getSimpleName()).getResultList(); 
} 
1

तुम भी #{#entityName} का उपयोग कर इसे लागू कर सकते हैं:

@Query("SELECT o FROM #{#entityName} o where o.attribute1=:attribute1") 
Page<T> findByAttribute1Custom(@Param("attribute1") String attribute1, Pageable pageable); 
संबंधित मुद्दे