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.