Това е така, защото дължината по подразбиране на VARCHAR колони в DDL изрази, създадени от повечето доставчици на JPA (включително Hibernate и EclipseLink) е 255. Указване на length атрибут към @Column анотацията помага да се отмени стойността, така че новата стойност да бъде уловена от генератора на схеми на доставчика на JPA.
Това е неправилно предположение. Доставчикът на JPA ще създаде таблици само веднъж и няма да променя динамично дължината на основната таблица по време на живота на приложението и само ако на първо място конфигурирате доставчика да създава/актуализира дефинициите на таблицата. Освен това, съпоставянето по подразбиране на String е SQL VARCHAR тип.
Изглежда, че сте конфигурирали доставчика на JPA да създава таблици според нуждите (след като е възможно да ги изпуснете) по време на процеса на инициализация. Ако използвате Hibernate, това се прави с помощта на hibernate.hbm2ddl.auto свойство, посочено в persistence.xml със стойност update , create или create-drop . С EclipseLink ще укажете свойството eclipselink.ddl-generation със стойност create-tables или drop-and-create-tables .
И двете от горните свойства не се препоръчват за използване в производство среда
. Идеалният подход е да имате DDL скриптове за създаване на таблиците. Тъй като използвате VARCHAR , трябва да посочите подходяща дължина в дефиницията на колоната, да отговаря на максималната дължина на въведените от потребителя . Освен това, тъй като използвате VARCHAR през CHAR , механизмът на базата данни ще гарантира, че разпределеното място за съхранение ще зависи от размера на записаните записи.
Ако не се нуждаете от низ към VARCHAR по подразбиране съпоставяне и вместо това да използвате друго валидно съпоставяне, тогава трябва да използвате columnDefinition атрибут на @Column анотация. Примерно използване за картографиране на Calendar към TIMESTAMPTZ Типът на SQL данни е показан в JPA WikiBook
; ще трябва да промените това, за да отговаря на вашите нужди.