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.