Da quello che so non c'è davvero modo per Hibernate o MySQL di troncare automaticamente le stringhe senza che tu aggiunga la logica per gestirlo. Il motivo per cui credo che qualcosa del genere non esista è che non vorrei mai che ciò che ho chiesto di inserire in un database fosse diverso da ciò che è stato effettivamente inserito.
Penso che le tue uniche opzioni siano...
-
Modifica le definizioni delle colonne. Rendilo un campo varchar più grande o forse anche un campo di testo. Non perdere tempo a costruire uno strumento magico quando la semplice modifica della definizione della colonna risolverebbe il problema in un paio di clic. Consiglio di farlo!
-
Potrei vederti usare una sorta di aspetto per intercettare i setter e quindi regolando la dimensione della stringa se è maggiore di x lunghezza. Questo sarebbe il motivo più veloce per gestirlo nel tuo codice. Se la modifica del DB non è un'opzione e hai migliaia di campi, questa sarebbe la mia prossima scelta.
-
Crea un'utilità String classe che può ridimensionare le tue stringhe...
setText(String val){this.text =StringUtil.truncate(val,size);}
[AGGIORNAMENTO] Dal momento che non puoi davvero aggiornare il database, consiglierei un aspetto per intercettare i setter di stringhe e controllarne la lunghezza potrebbe sembrare così (la sintassi potrebbe essere disattivata e non l'ho testato)...
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);
}
Inoltre, ci sarebbe un sovraccarico aggiuntivo se un livello dovesse controllare la dimensione della colonna definita rispetto a tutti i dati che entrano nella tabella su ciascun inserto.