Dit komt omdat de standaardlengte van VARCHAR
kolommen in DDL-instructies die zijn gemaakt door de meeste JPA-providers (inclusief Hibernate en EclipseLink) is 255. De length
opgeven attribuut aan de @Column
annotatie helpt de waarde te overschrijven, zodat de nieuwe waarde wordt opgepikt door de schemagenerator van de JPA-provider.
Dit is een onjuiste veronderstelling. De JPA-provider maakt tabellen slechts één keer en verandert de lengte van de onderliggende tabel niet dynamisch tijdens de levensduur van de toepassing, en alleen als u de provider configureert om de tabeldefinities in de eerste plaats te maken/bijwerken. Bovendien is de standaardtoewijzing van String
is de SQL VARCHAR
typ.
Het lijkt erop dat u de JPA-provider hebt geconfigureerd om tabellen te maken zoals nodig (na ze mogelijk te hebben verwijderd), tijdens het initialisatieproces. Als u Hibernate gebruikt, wordt dit gedaan met behulp van de hibernate.hbm2ddl.auto
eigenschap gespecificeerd in persistence.xml
met een waarde van update
, create
of create-drop
. Met EclipseLink specificeert u de eigenschap eclipselink.ddl-generation
met een waarde van create-tables
of drop-and-create-tables
.
Beide bovenstaande eigenschappen worden niet aanbevolen voor gebruik in een productie omgeving
. De ideale benadering is om DDL-scripts te hebben om de tabellen te maken. Sindsdien gebruikt u VARCHAR
, moet u een geschikte lengte opgeven in de kolomdefinitie, om te passen bij de maximale lengte van de gebruikersinvoer . Bovendien, aangezien u VARCHAR
. gebruikt over CHAR
, zal de database-engine ervoor zorgen dat de toegewezen opslagruimte afhankelijk is van de grootte van de records die worden opgeslagen.
Als u geen string nodig heeft naar de standaard VARCHAR
mapping en in plaats daarvan een andere geldige mapping gebruiken, dan moet u columnDefinition
. gebruiken attribuut van de @Column
annotatie. Een voorbeeldgebruik voor het toewijzen van Calendar
naar de TIMESTAMPTZ
SQL-gegevenstype wordt weergegeven in het JPA WikiBook
; u moet dit aanpassen aan uw behoefte.