sql >> Base de Datos >  >> RDS >> Mysql

Manejo adecuado de datos largos en Hibernate

Por lo que sé, realmente no hay forma de que Hibernate o MySQL trunquen cadenas automáticamente sin que usted agregue la lógica para manejar esto. La razón por la que creo que algo como esto no existe es que nunca querría que lo que pedí que se insertara en una base de datos fuera diferente de lo que realmente se insertó.

Creo que tus únicas opciones son...

  1. Cambie las definiciones de columna. Conviértalo en un campo varchar más grande o tal vez incluso en un campo de texto. No dedique tiempo a crear una herramienta mágica cuando simplemente cambiando la definición de la columna solucionaría esto con un par de clics. ¡Recomiendo hacer esto!

  2. Podría verte usando algún tipo de aspecto para interceptar los setters y luego ajustando el tamaño de la cuerda si es más grande que x longitud. Esta sería la razón más rápida para manejarlo en su código. Si cambiar la base de datos no es una opción y tiene miles de campos, esta sería mi próxima opción.

  3. Crear una utilidad de cadena clase que puede cambiar el tamaño de sus cadenas...

    setText(String val){this.text =StringUtil.truncate(val,size);}

[ACTUALIZAR] Dado que realmente no puede actualizar la base de datos, recomendaría un aspecto para interceptar los establecedores de cadenas y verificar su longitud, podría verse así (la sintaxis puede estar desactivada y no probé esto)...

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);
}

Además, habría una sobrecarga adicional si alguna capa tuviera que verificar el tamaño de columna definido con todos los datos que ingresan a la tabla en cada inserción.