Dzieje się tak, ponieważ domyślna długość VARCHAR
kolumn w instrukcjach DDL utworzonych przez większość dostawców JPA (w tym Hibernate i EclipseLink) wynosi 255. Określanie length
atrybut do @Column
adnotacja pomaga nadpisać wartość, dzięki czemu nowa wartość jest pobierana przez generator schematów dostawcy JPA.
To błędne założenie. Dostawca JPA utworzy tabele tylko raz i nie będzie dynamicznie zmieniał długości tabeli bazowej w okresie istnienia aplikacji, i tylko wtedy, gdy skonfigurujesz dostawcę tak, aby w pierwszej kolejności tworzył/aktualizował definicje tabel. Co więcej, domyślne mapowanie String
to SQL VARCHAR
typ.
Wygląda na to, że skonfigurowałeś dostawcę JPA do tworzenia tabel w razie potrzeby (po ewentualnym ich porzuceniu) podczas procesu inicjalizacji. Jeśli używasz Hibernate, odbywa się to za pomocą hibernate.hbm2ddl.auto
właściwość określona w persistence.xml
o wartości update
, create
lub create-drop
. W przypadku EclipseLink należy określić właściwość eclipselink.ddl-generation
z wartością create-tables
lub drop-and-create-tables
.
Nie zaleca się używania obu powyższych właściwości w produkcji środowisko
. Idealnym podejściem jest posiadanie skryptów DDL do tworzenia tabel. Ponieważ używasz VARCHAR
, należy określić odpowiednią długość w definicji kolumny, aby dopasować się do maksymalnej długości danych wejściowych użytkownika . Dodatkowo, ponieważ używasz VARCHAR
ponad CHAR
, silnik bazy danych zapewni, że przydzielona przestrzeń pamięci będzie zależeć od rozmiaru przechowywanych rekordów.
Jeśli nie potrzebujesz ciągu znaków do domyślnego VARCHAR
mapowania i zamiast tego użyj innego poprawnego mapowania, musisz użyć columnDefinition
atrybut @Column
adnotacja. Przykładowe użycie mapowania Calendar
do TIMESTAMPTZ
Typ danych SQL jest pokazany w JPA WikiBook
; musisz to zmodyfikować, aby odpowiadało Twoim potrzebom.