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.