2010-11-30 15 views
7

क्या सभी परियोजना इकाइयों के लिए एक सामान्य उपसर्ग जोड़ने के लिए जेपीए/हाइबरनेट में तालिका नामों को ओवरराइड करना संभव है? उदाहरण के लिए "जेबीपीएम 5_" उपसर्ग द्वारा सभी जेबीपीएम 5 टेबल को उपसर्ग करने में सक्षम होना चाहिए। स्वीकार किए जाते हैं जवाब के लिएजेपीए (हाइबरनेट) और कस्टम टेबल उपसर्ग

उदाहरण:

public class JBPM5NamingStrategy extends ImprovedNamingStrategy { 
    public String classToTableName(String className) { 
     return StringHelper.unqualify(className); 
    } 
    public String propertyToColumnName(String propertyName) { 
     return propertyName; 
    } 
    public String tableName(String tableName) { 
     return "JBPM5_" + tableName; 
    } 
    public String columnName(String columnName) { 
     return columnName; 
    } 
    public String propertyToTableName(String className, String propertyName) { 
     return "JBPM5_" + classToTableName(className) + '_' 
     + propertyToColumnName(propertyName); 
    } 
} 
+0

आपका मतलब '@ टेबल' एनोटेशन के अलावा है? –

+0

हां, तालिका एनोटेशन के अलावा। मेरे पास वास्तव में एक तृतीय पक्ष प्रोजेक्ट है, इसलिए केवल कॉन्फ़िगरेशन व्यवहार्य है (मैं संकलित जावा स्रोत को स्पर्श नहीं कर सकता)। –

+2

और व्यक्तिगत वर्ग –

उत्तर

25

एक तरह से एक ही बार में सभी तालिकाओं नाम बदलने के लिए, अपने खुद के namingStrategy (org.hibernate.cfg.NamingStrategy के कार्यान्वयन) लागू करने के लिए है।

NamingStrategy इस्तेमाल किया

<property name="hibernate.ejb.naming_strategy" 
      value="com.example.MyNamingStrategy" /> 
+5

पर एनोटेशन का उपयोग करके साइट-व्यापी नीति को कार्यान्वित करने के लिए यह कठिन और त्रुटि-प्रवण भी है, क्या कोई इस उत्तर में कोई उदाहरण संपादित और पेस्ट कर सकता है? प्रलेखन के लिंक के लिए –

18

उपयोग एक NamingStrategy द्वारा persistence.xml भीतर निर्दिष्ट किया जाता है। यह previous answer of mine आपको वही प्रदान करना चाहिए जो आपको चाहिए।

पिछले जवाब से कॉपी किया गया:

public class CustomNamingStrategy extends ImprovedNamingStrategy { 

    private static final long serialVersionUID = 1L; 
    private static final String PREFIX = "PFX_"; 

    @Override 
    public String classToTableName(final String className) { 
     return this.addPrefix(super.classToTableName(className)); 
    } 

    @Override 
    public String collectionTableName(final String ownerEntity, 
      final String ownerEntityTable, final String associatedEntity, 
      final String associatedEntityTable, final String propertyName) { 
     return this.addPrefix(super.collectionTableName(ownerEntity, 
       ownerEntityTable, associatedEntity, associatedEntityTable, 
       propertyName)); 
    } 

    @Override 
    public String logicalCollectionTableName(final String tableName, 
      final String ownerEntityTable, final String associatedEntityTable, 
      final String propertyName) { 
     return this.addPrefix(super.logicalCollectionTableName(tableName, 
       ownerEntityTable, associatedEntityTable, propertyName)); 
    } 

    private String addPrefix(final String composedTableName) { 

     return PREFIX 
       + composedTableName.toUpperCase().replace("_", ""); 

    } 

} 
:

यहां नमूने NamingStrategy कि तालिकाओं में शामिल होने के लिए प्रपत्र TYPE1_TYPE2 की तालिका नामों का निर्माण और उनकी तालिकाओं के लिए एक आम उपसर्ग कहते है

+0

+1 – Ralph

+0

+1, कभी भी नामकरणस्ट्रेटी के बारे में नहीं पता था, आप हर दिन कुछ नया सीखते हैं! – Qwerky

+4

यह एक हाइबरनेट विशिष्ट चीज है। यह अन्य जेपीए प्रदाताओं के साथ काम नहीं करता –

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