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.