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

Cómo aumentar la longitud de una cadena en mysql mientras se mapea usando JPA

Esto se debe a que la longitud predeterminada de VARCHAR columnas en declaraciones DDL creadas por la mayoría de los proveedores de JPA (incluidos Hibernate y EclipseLink) es 255. Especificación de la length atributo a @Column la anotación ayuda a anular el valor, de modo que el generador de esquemas del proveedor de JPA recoja el nuevo valor.

Esta es una suposición incorrecta. El proveedor de JPA creará tablas solo una vez y no cambiará dinámicamente la longitud de la tabla subyacente durante la vida útil de la aplicación, y solo si configura el proveedor para crear/actualizar las definiciones de la tabla en primer lugar. Además, la asignación predeterminada de String es el SQL VARCHAR tipo.

Parece que ha configurado el proveedor de JPA para crear tablas según sea necesario (después de posiblemente eliminarlas), durante el proceso de inicialización. Si está usando Hibernate, esto se hace usando hibernate.hbm2ddl.auto propiedad especificada en persistence.xml con un valor de update , create o create-drop . Con EclipseLink, estaría especificando la propiedad eclipselink.ddl-generation con un valor de create-tables o drop-and-create-tables .

Las dos propiedades anteriores no se recomiendan para su uso en una producción ambiente . El enfoque ideal es tener scripts DDL para crear las tablas. Ya que estás usando VARCHAR , debe especificar una longitud adecuada en la definición de la columna, para que se ajuste a la longitud máxima de la entrada del usuario . Además, dado que está utilizando VARCHAR sobre CHAR , el motor de la base de datos se asegurará de que el espacio de almacenamiento asignado dependerá del tamaño de los registros que se almacenen.

Si no necesita una cadena para el valor predeterminado VARCHAR mapeo y en su lugar usa otro mapeo válido, entonces debes usar columnDefinition atributo de la @Column anotación. Un ejemplo de uso para mapear Calendar al TIMESTAMPTZ El tipo de datos SQL se muestra en el JPA WikiBook ; deberá modificar esto para que se ajuste a sus necesidades.