2012-08-16 2 views
9

प्री-हिस्ट्री: मुझे जेडीबीसीएक्सप्शन रिपेटर data exception: string data, right truncation इकाइयों के अपडेट पर अपवाद मिलता है।service.xml या सेवा बिल्डर का उपयोग कर स्ट्रिंग कॉलम का आकार कैसे सेट करें?

मुझे पता चला है कि इसका मतलब है, निर्दिष्ट varchar के लिए डेटा बहुत बड़ा है।

service.xml में स्तंभ की तरह निर्दिष्ट किया जाता है:

<column name="message" type="String"/> 

मैं Liferay के स्रोत कोड में ServiceBuilder के लिए इस टुकड़ा पाया है:

else if (colType.equals("String")) { 
    Map<String, String> hints = ModelHintsUtil.getHints(
     _packagePath + ".model." + entity.getName(), colName); 

    int maxLength = 75; 

    if (hints != null) { 
     maxLength = GetterUtil.getInteger(
      hints.get("max-length"), maxLength); 
    } 

    if (col.isLocalized()) { 
     maxLength = 4000; 
    } 

    if (maxLength < 4000) { 
     sb.append("VARCHAR(" + maxLength + ")"); 
    } 
    else if (maxLength == 4000) { 
     sb.append("STRING"); 
    } 
    else if (maxLength > 4000) { 
     sb.append("TEXT"); 
    } 
} 

अब मेरे सवाल का, मैं कैसे max-length परिभाषित कर सकते हैं है मेरे कॉलम के लिए?

उत्तर

22

आप अपने portlet-model-hints.xml फ़ाइल को संशोधित करने के लिए है कि आप के तहत खोजना चाहिए की जरूरत है:

docroot/WEB-INF/src/META-INF/portlet-model-hints.xml 

यहाँ में आप इस तरह के रूप hint मान निर्धारित कर सकते हैं:

<hint-collection name="TEXTAREA"> 
    <hint name="max-length">500</hint> 
</hint-collection> 

तब स्तंभ (रों) लगता है आप चाहते हैं इस फ़ाइल में hint लागू करने के लिए और इसे इस तरह दिखना चाहिए:

<field name="your_column_name" type="String"> 
    <hint-collection name="TEXTAREA" /> 
</field> 

या तुम भी सीधे इस तरह लिख सकते हैं, अगर वहाँ max-length की निर्दिष्ट संकेत के साथ केवल एक कॉलम है:

<field name="your_column_name" type="String"> 
    <hint name="max-length">500</hint> 
</field> 

तो फिर तुम build-service फिर से चलाने की जरूरत है और जब आप अपने portlet तैनात अपने डीबी तालिका होना चाहिए इस परिवर्तन को दर्शाने के लिए अद्यतन किया गया।

मुझे आशा है कि यह आपके प्रश्न का उत्तर देगा!

अन्य hints हैं और इस सूची को wiki में पाया जा सकता है, मैंने अभी max-length दिखाया है जैसा कि आपको लगता है कि यह वही है।

यदि आपकी एक तालिका थी, तो एक कॉलम के साथ पूरी फ़ाइल निम्न की तरह दिखाई देगी। आपका सबसे अधिक संभावना अधिक होगा!

<?xml version="1.0"?> 
<model-hints> 
    <hint-collection name="TEXTAREA"> 
     <hint name="max-length">500</hint> 
    </hint-collection> 
    <model name="com.mynamespace.model.MyModelClass"> 
     <field name="myColumn" type="String"> 
      <hint-collection name="TEXTAREA" /> 
     </field> 
    </model> 
</model-hints> 
संबंधित मुद्दे