Một dự án tôi làm việc trên (sử dụng Java, Spring, Hibernate) gần đây đã thay đổi từ Oracle sang MySQL. Có một vài trường hợp trong đó một số thuộc tính trong mã là các từ dành riêng trong MySQL, chẳng hạn như "phát hành".Hibernate: sử dụng backticks cho MySQL nhưng không cho HSQL
Có một vài giải pháp, 1) đổi tên thuộc tính trong mã và phương thức getter/setter tiếp theo, cũng cập nhật mã gọi các phương thức 2) chú thích thuộc tính trong mã bằng @Column (name = "` release` "). Điều này cho phép hibernate báo giá tên khi nói chuyện với cơ sở dữ liệu.
Tôi muốn tránh xa cách tiếp cận đầu tiên để giảm cơ hội phá vỡ nhiều nội dung hơn. Cách tiếp cận thứ hai là "ok", ngoại trừ nó trở thành MySQL cụ thể. Trong dev của chúng tôi. thiết lập chúng tôi sử dụng HSQL mà không thích backticks xung quanh những tên cột.
Tôi đã xem lớp org.hibernate.mapping.Column và tôi thấy nó có phương thức "getQuotedName" mà tôi có khả năng ghi đè nếu tôi có thể phân lớp cột và cho Hibernate sử dụng lớp Cột của riêng tôi.
Cách tốt nhất để giải quyết vấn đề này dựa trên cách tiếp cận ưa thích của a) không phải cấu trúc lại codebase (b/c thay đổi tên thuộc tính, phương thức getter/setter, vv) và b) làm việc trong HSQL và MySQL.
Sẽ hợp lý khi có thuộc tính trong tệp thuộc tính có thể được bật để bật/tắt một số sửa chữa đặt tên Cột. Mà nhắc tôi, tôi đã thử bằng cách sử dụng một chiến lược đặt tên tùy chỉnh và ghi đè phương thức "columnName" để bao quanh tên cột trong backticks ... điều này không hoạt động, ngay cả trên MySQL.
Dường như có một thuộc tính mới hibernate.globally_quoted_identifiers (http://opensource.atlassian.com/projects/hibernate/browse/HHH-4453) có thể được sử dụng (như ngủ đông 3,5 tôi tin) nhưng không được ghi lại (http://opensource.atlassian.com/projects/hibernate/browse/HHH-5673). Đây không phải là một lựa chọn cho tôi vì tôi đang sử dụng Hibernate 3.3 – codecraig
Tôi vừa trả lời câu hỏi của bạn và tôi không biết về câu hỏi này. Đây là lần đầu tiên tôi thấy một câu hỏi chính xác hơn câu trả lời :-) – jpkrohling