Efter hvad jeg ved, er der virkelig ingen måde for Hibernate eller MySQL til automatisk at afkorte strenge, uden at du tilføjer logikken til at håndtere dette. Grunden til, at jeg ville tro, at sådan noget ikke eksisterer, er, at jeg aldrig ville ønske, at det, jeg bad om at blive indsat i en database, var anderledes end det, der virkelig blev indsat.
Jeg tror, at dine eneste muligheder er...
-
Skift kolonnedefinitionerne. Gør det til et større varcharfelt eller måske endda et tekstfelt. Brug ikke tid på at bygge et magisk værktøj, når blot en ændring af kolonnedefinitionen ville løse dette med et par klik. Jeg anbefaler at gøre dette!
-
Jeg kunne se dig bruge en slags aspekt til at opsnappe sætterne og derefter justere størrelsen på strengen, hvis den er større end x længde. Dette ville være den hurtigste grund til at håndtere det i din kode. Hvis ændring af DB ikke er en mulighed, og du har tusindvis af felter, ville dette være mit næste valg.
-
Byg et strengværktøj klasse, som kan ændre størrelsen på dine strenge...
setText(String val){this.text =StringUtil.truncate(val,size);}
[OPDATERING] Da du ikke rigtig kan opdatere databasen, vil jeg anbefale et aspekt til at opsnappe strengsættere og kontrollere deres længde, det kan se sådan ud (syntaks kan være slået fra, og jeg testede ikke dette)...
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);
}
Der ville også være nogle ekstra overhead, hvis et eller andet lag skulle kontrollere den definerede kolonnestørrelse i forhold til alle de data, der kommer ind i tabellen på hver indsats.