при сопоставлении с таблицей, я вижу, что String сопоставляется с varchar (255) в Mysql
Это связано с тем, что длина по умолчанию VARCHAR
столбцов в выражениях DDL создаетсябольшинство поставщиков JPA (включая Hibernate и EclipseLink) имеет значение 255. Указание атрибута length
для аннотации @Column
помогает переопределить значение, так что новое значение выбирается генератором схемы поставщика JPA.
Я думал, что если мы просто отобразим String в java, база данных будет динамически назначать длину.
Это неверное предположение.Поставщик 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
mapping и вместо этого используется другое допустимое отображение, тогда вы должны использовать columnDefinition
атрибут аннотации @Column
.Пример использования для сопоставления Calendar
с типом данных TIMESTAMPTZ
SQL показан в JPA WikiBook ;вам нужно изменить это в соответствии с вашими потребностями.