Pelo que eu sei, realmente não há como o Hibernate ou o MySQL truncar automaticamente as strings sem que você adicione a lógica para lidar com isso. A razão pela qual eu acreditaria que algo assim não existe é que eu nunca gostaria que o que eu pedi para ser inserido em um banco de dados fosse diferente do que realmente foi inserido.
Acho que suas únicas opções são...
-
Altere as definições de coluna. Torne-o um campo varchar maior ou talvez até um campo de texto. Não gaste tempo construindo uma ferramenta mágica quando apenas alterar a definição da coluna resolveria isso em alguns cliques. Eu recomendo fazer isso!
-
Pude ver você usando algum tipo de aspecto para interceptar os setters e, em seguida, ajustando o tamanho da string se for maior que x comprimento. Este seria o motivo mais rápido para lidar com isso em seu código. Se alterar o banco de dados não for uma opção e você tiver milhares de campos, essa seria minha próxima escolha.
-
Crie um utilitário String classe que pode redimensionar suas strings ...
setText(String val){this.text =StringUtil.truncate(val,size);}
[ATUALIZAÇÃO] Como você não pode realmente atualizar o banco de dados, eu recomendaria um aspecto para interceptar setters de String e verificar seu comprimento, pode ficar assim (a sintaxe pode estar desativada e eu não testei isso) ...
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);
}
Além disso, haveria alguma sobrecarga adicional se alguma camada tivesse que verificar o tamanho da coluna definida em relação a todos os dados que chegam à tabela em cada inserção.