Z toho, co vím, opravdu neexistuje způsob, jak by Hibernate nebo MySQL automaticky zkracovaly řetězce, aniž byste k tomu přidali logiku. Důvod, proč bych věřil, že něco takového neexistuje, je ten, že bych nikdy nechtěl, aby to, co jsem požádal o vložení do databáze, bylo jiné než to, co bylo skutečně vloženo.
Myslím, že vaše jediné možnosti jsou...
-
Změňte definice sloupců. Udělejte z něj větší pole varchar nebo možná dokonce textové pole. Neztrácejte čas vytvářením kouzelného nástroje, když pouhá změna definice sloupce by to vyřešila několika kliknutími. Doporučuji to udělat!
-
Viděl jsem, že používáte nějaký druh aspektu k zachycení settery a pak úpravou velikosti struny, pokud je větší než x délka. To by byl nejrychlejší důvod, proč to zpracovat ve vašem kódu. Pokud změna DB není možností a máte tisíce polí, byla by to moje další volba.
-
Nástroj pro vytvoření řetězce třída, která může změnit velikost vašich řetězců...
setText(String hodnota){this.text =StringUtil.truncate(val,size);}
[AKTUALIZACE] Vzhledem k tomu, že nemůžete skutečně aktualizovat databázi, doporučil bych aspekt pro zachycení nastavovačů řetězců a kontrolu jejich délky, mohlo by to vypadat takto (syntaxe může být vypnutá a toto jsem netestoval)...
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);
}
Také by došlo k určité další režii, pokud by některá vrstva musela kontrolovat definovanou velikost sloupce se všemi daty přicházejícími do tabulky na každé vložce.