Доколкото знам, наистина няма начин Hibernate или MySQL автоматично да съкратят низовете, без да добавите логиката, за да се справите с това. Причината, поради която вярвам, че нещо подобно не съществува, е, че никога не бих искал това, което поисках да бъде вмъкнато в база данни, да е различно от това, което наистина беше вмъкнато.
Мисля, че единствените ви опции са...
-
Променете дефинициите на колоните. Направете го по-голямо поле за varchar или може би дори текстово поле. Не прекарвайте време в изграждането на магически инструмент, когато само промяната на дефиницията на колоната би поправила това с няколко щраквания. Препоръчвам да направите това!
-
Виждам как използвате някакъв вид аспект за прихващане сетерите и след това коригиране на размера на низа, ако е по-голям от x дължина. Това би било най-бързото защо да го обработвате в кода си. Ако промяната на DB не е опция и имате хиляди полета, това би бил следващият ми избор.
-
Създаване на String util клас, който може да преоразмерява вашите низове...
setText(String val){this.text =StringUtil.truncate(val,size);}
[АКТУАЛИЗИРАНЕ] Тъй като наистина не можете да актуализирате базата данни, бих препоръчал аспект за прихващане на низови настройки и проверка на тяхната дължина, може да изглежда така (синтаксисът може да е изключен и не съм тествал това)...
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);
}
Освен това би имало някои допълнителни разходи, ако някой слой трябваше да провери определения размер на колоната спрямо всички данни, влизащи в таблицата за всяка вмъкване.