2010-02-18 26 views
8

Tôi có một mô hình dữ liệu JPA/Hibernate mà tôi đang sử dụng công cụ hibernate hbm2ddl để tạo cơ sở dữ liệu DDL. Tôi có một số chuỗi nên được CHAR và một số có thể là VARCHAR trong cơ sở dữ liệu. Tôi muốn giảm thiểu việc chỉnh sửa tay của DDL (tôi nhận ra rằng một số sẽ phải xảy ra).Phát sinh DDL JPA/Hibernate; CHAR vs. VARCHAR

Bất kỳ ai biết cách tôi nên thực hiện việc này? Tôi nhận ra rằng tôi có thể làm cho tất cả các chuỗi VARCHARS hoặc CHARS thông qua một phương ngữ bị tấn công, nhưng đó không phải là những gì luôn luôn thích hợp trong cơ sở dữ liệu.

Tôi muốn có thể thực hiện việc này bằng chú thích hoặc aop, tránh văn bản định nghĩa cột tùy chỉnh trong các lớp học của tôi.

Cảm ơn.

Trả lời

4

Vì vậy, cuối cùng tôi đã tìm thấy rằng bạn có thể chỉ định giới hạn độ dài cho loại trong phương ngữ. Vì vậy, tôi đã quyết định rằng bất cứ điều gì dưới một chiều dài 10 nên được char và bất cứ điều gì trên đó nên được varchar:

registerColumnType(Types.VARCHAR, 10, "char($l)"); 

Đó không phải là chính xác những gì tôi muốn, nhưng đó là đủ tốt. Buồn rằng tôi không tìm thấy điều đó sớm hơn.

11

Chú thích chuỗi bạn muốn ánh xạ tới CHAR trong cơ sở dữ liệu với @Column(columnDefinition="CHAR(<your-char-length>)").

+1

Cảm ơn câu trả lời của bạn, nhưng trong đoạn cuối của tôi, tôi đề cập đến điều đó. Tôi đang cố gắng tránh sử dụng columnDefinition. Tôi chỉ hy vọng rằng có một cách tốt hơn, vì điều này dường như là một mong muốn hợp lý. –

+0

Không có nhiều sự khác biệt giữa việc thêm chú thích và thêm thuộc tính chú thích. – mtpettyp

+1

Ah, nhưng sự khác biệt là nội dung của thuộc tính. Đó là văn bản được đưa trực tiếp vào lược đồ ddl, do đó, vốn là cơ sở dữ liệu cụ thể. Ngoài ra, tôi phải lặp lại chiều dài của cột trong văn bản. Ví dụ cụ thể này không quá tệ, nhưng đáng để tránh nếu tôi có thể. Nó không có vẻ đầy hứa hẹn, tôi phải thừa nhận. –