Dette skyldes, at standardlængden på VARCHAR
kolonner i DDL-sætninger oprettet af de fleste JPA-udbydere (inklusive Hibernate og EclipseLink) er 255. Angivelse af length
attribut til @Column
annotering hjælper med at tilsidesætte værdien, så den nye værdi opfanges af JPA-udbyderens skemagenerator.
Dette er en forkert antagelse. JPA-udbyderen vil kun oprette tabeller én gang og vil ikke dynamisk ændre længden af den underliggende tabel i løbet af applikationens levetid, og kun hvis du konfigurerer udbyderen til at oprette/opdatere tabeldefinitionerne i første omgang. Desuden standardtilknytningen af String
er SQL VARCHAR
type.
Du ser ud til at have konfigureret JPA-udbyderen til at oprette tabeller efter behov (efter muligvis at have droppet dem) under initialiseringsprocessen. Hvis du bruger Hibernate, gøres dette ved hjælp af hibernate.hbm2ddl.auto
egenskab angivet i persistence.xml
med værdien update
, create
eller create-drop
. Med EclipseLink ville du angive egenskaben eclipselink.ddl-generation
med værdien create-tables
eller drop-and-create-tables
.
Begge af ovenstående egenskaber anbefales ikke til brug i en produktion miljø
. Den ideelle tilgang er at have DDL-scripts til at oprette tabellerne. Siden bruger du VARCHAR
, bør du angive en passende længde i kolonnedefinitionen for at passe til den maksimale længde af brugerinput . Derudover, da du bruger VARCHAR
over CHAR
, vil databasemotoren sikre, at den tildelte lagerplads vil afhænge af størrelsen af de poster, der lagres.
Hvis du ikke har brug for en streng til standard VARCHAR
mapping og i stedet bruge en anden gyldig mapping, så skal du bruge columnDefinition
attribut for @Column
anmærkning. Et eksempel på brug til kortlægning af Calendar
til TIMESTAMPTZ
SQL-datatypen er vist i JPA WikiBook
; du bliver nødt til at ændre dette, så det passer til dit behov.