Điều này là do độ dài mặc định của VARCHAR
cột trong câu lệnh DDL được tạo bởi hầu hết các nhà cung cấp JPA (bao gồm cả Hibernate và EclipseLink) là 255. Chỉ định length
thuộc tính cho @Column
chú thích giúp ghi đè giá trị để giá trị mới được chọn bởi trình tạo giản đồ của nhà cung cấp JPA.
Đây là một giả định không chính xác. Nhà cung cấp JPA sẽ chỉ tạo bảng một lần và sẽ không tự động thay đổi độ dài của bảng bên dưới trong suốt thời gian tồn tại của ứng dụng và chỉ khi bạn định cấu hình trình cung cấp để tạo / cập nhật định nghĩa bảng ngay từ đầu. Hơn nữa, ánh xạ mặc định của String
là VARCHAR
trong SQL loại.
Dường như bạn đã định cấu hình nhà cung cấp JPA để tạo các bảng khi cần thiết (sau khi có thể bỏ chúng), trong quá trình khởi tạo. Nếu bạn đang sử dụng Hibernate, điều này được thực hiện bằng cách sử dụng hibernate.hbm2ddl.auto
thuộc tính được chỉ định trong persistence.xml
với giá trị là update
, create
hoặc create-drop
. Với EclipseLink, bạn sẽ chỉ định thuộc tính eclipselink.ddl-generation
với giá trị là create-tables
hoặc drop-and-create-tables
.
Cả hai thuộc tính trên đều không được khuyến nghị sử dụng trong sản xuất môi trường
. Cách tiếp cận lý tưởng là có các tập lệnh DDL để tạo các bảng. Vì bạn đang sử dụng VARCHAR
, bạn phải chỉ định độ dài phù hợp trong định nghĩa cột, để vừa với độ dài tối đa của thông tin người dùng nhập . Ngoài ra, vì bạn đang sử dụng VARCHAR
qua CHAR
, công cụ cơ sở dữ liệu sẽ đảm bảo rằng không gian lưu trữ được phân bổ sẽ phụ thuộc vào kích thước của các bản ghi đang được lưu trữ.
Nếu bạn không cần một Chuỗi để VARCHAR
mặc định ánh xạ và thay vào đó sử dụng một ánh xạ hợp lệ khác, sau đó bạn phải sử dụng columnDefinition
thuộc tính của @Column
chú thích. Ví dụ về cách sử dụng để ánh xạ Calendar
tới TIMESTAMPTZ
Kiểu dữ liệu SQL được hiển thị trong JPA WikiBook
; bạn sẽ cần sửa đổi điều này cho phù hợp với nhu cầu của mình.