जो मुझे पता है उससे वास्तव में हाइबरनेट या MySQL के लिए इसे संभालने के लिए तर्क में जोड़ने के बिना तारों को स्वचालित रूप से छोटा करने का कोई तरीका नहीं है। इसका कारण यह है कि मुझे विश्वास होगा कि ऐसा कुछ अस्तित्व में नहीं है कि मैं कभी नहीं चाहता कि जो मैंने डेटाबेस में डालने के लिए कहा वह वास्तव में डाला गया था उससे अलग हो।
मुझे लगता है कि आपके लिए एकमात्र विकल्प हैं...
-
स्तंभ परिभाषाएं बदलें। इसे एक बड़ा वर्चर फ़ील्ड या शायद टेक्स्ट फ़ील्ड भी बनाएं। एक जादू उपकरण बनाने में समय व्यतीत न करें जब कॉलम की परिभाषा बदलने से यह कुछ ही क्लिक में ठीक हो जाएगा। मैं ऐसा करने की सलाह देता हूं!
-
मैं आपको किसी तरह के अवरोधन के पहलू . का उपयोग करते हुए देख सकता था सेटर्स और फिर स्ट्रिंग के आकार को समायोजित करना यदि यह x लंबाई से बड़ा है। यह आपके कोड में इसे संभालने का सबसे तेज़ कारण होगा। यदि डीबी बदलना कोई विकल्प नहीं है और आपके पास हजारों फ़ील्ड हैं तो यह मेरी अगली पसंद होगी।
-
स्ट्रिंग उपयोग बनाएं क्लास जो आपके स्ट्रिंग्स को फिर से आकार दे सकती है...
सेटटेक्स्ट (स्ट्रिंग वैल) {this.text =StringUtil.truncate (वैल, आकार);}
[अद्यतन] चूंकि आप वास्तव में डेटाबेस को अपडेट नहीं कर सकते हैं, मैं स्ट्रिंग सेटर्स को रोकने और उनकी लंबाई की जांच करने के लिए एक पहलू की सिफारिश करता हूं, यह इस तरह दिख सकता है (वाक्यविन्यास बंद हो सकता है और मैंने इसका परीक्षण नहीं किया)...
private static final MAX_SIZE_OF_STRINGS = 255;
@Around("execution(* your.package.*.set*(..)) && args(java.lang.String)")
public void checkAroundSetter(final ProceedingJoinPoint pjp)
throws Throwable {
Object[] args = pjp.getArgs();
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof String && ((String) args[i]).size() > MAX_SIZE_OF_STRINGS) {
args[i] = ((String)args[i]).subString(0,MAX_SIZE_OF_STRINGS) ;
}
}
pjp.proceed(args);
}
इसके अलावा, कुछ अतिरिक्त ओवरहेड होगा यदि किसी परत को प्रत्येक सम्मिलन पर तालिका में आने वाले सभी डेटा के विरुद्ध परिभाषित कॉलम आकार की जांच करनी पड़े।