Důvodem je výchozí délka VARCHAR
sloupců v příkazech DDL vytvořených většinou poskytovatelů JPA (včetně Hibernate a EclipseLink) je 255. Zadání length
atribut do @Column
anotace pomáhá přepsat hodnotu, takže novou hodnotu vyzvedne generátor schémat poskytovatele JPA.
Toto je nesprávný předpoklad. Poskytovatel JPA vytvoří tabulky pouze jednou a nebude dynamicky měnit délku podkladové tabulky během životnosti aplikace, a to pouze v případě, že poskytovatele nakonfigurujete tak, aby nejprve vytvářel/aktualizoval definice tabulek. Navíc výchozí mapování String
je SQL VARCHAR
typ.
Zdá se, že jste během procesu inicializace nakonfigurovali poskytovatele JPA tak, aby vytvářel tabulky podle potřeby (poté, co je případně zrušili). Pokud používáte Hibernate, je to provedeno pomocí hibernate.hbm2ddl.auto
vlastnost specifikovaná v persistence.xml
s hodnotou update
, create
nebo create-drop
. S EclipseLink byste zadali vlastnost eclipselink.ddl-generation
s hodnotou create-tables
nebo drop-and-create-tables
.
Obě výše uvedené vlastnosti se nedoporučují pro použití v produkci prostředí
. Ideálním přístupem je mít k vytváření tabulek skripty DDL. Protože používáte VARCHAR
, měli byste v definici sloupce zadat vhodnou délku, aby se vešla do maximální délky uživatelského vstupu . Navíc, protože používáte VARCHAR
přes CHAR
, databázový stroj zajistí, že přidělený úložný prostor bude záviset na velikosti ukládaných záznamů.
Pokud nepotřebujete řetězec k výchozímu VARCHAR
mapování a místo toho použijte jiné platné mapování, pak musíte použít columnDefinition
atributu @Column
anotace. Příklad použití pro mapování Calendar
na TIMESTAMPTZ
Datový typ SQL je uveden v JPA WikiBook
; budete muset toto upravit, aby vyhovovalo vašim potřebám.