2012-01-11 12 views
6

Tôi có ứng dụng web Java EE 5 dựa trên Seam 2.2 với một loạt các bảng được ánh xạ tới thực thể JPA 1.0 qua Hibernate 3.3.3. Trong quá trình phát triển, nó chạy trên một Tomcat 6, Oracle 10 XE và Windows 7.Thực thi JPA trên từ đồng nghĩa thay vì bảng

Bây giờ, chúng tôi đã yêu cầu bộ phận hoạt động chia mô hình dữ liệu thành một lược đồ làm chủ sở hữu của tất cả các đối tượng cơ sở dữ liệu (myschema) và một lược đồ hoạt động như người dùng cơ sở dữ liệu của ứng dụng (myschema_app). Vì vậy, tôi đã làm như sau:

  • tạo schema myschema_app
  • quyền đối tượng cấp trên tất cả các bảng cần thiết từ myschema (cả những người bình thường và n: m bảng trung gian) và trình tự tùy thuộc vào việc sử dụng (một hoặc nhiều select , insert, update, delete) để myschema_app
  • tuyên bố từ đồng nghĩa riêng trong myschema_app để sử dụng cùng tên so với trước đây và giấu tên schema khác của tiền tố
  • thay đổi sở hữu hibernate.default_schema để đặt tên schema mới trong persistence.xml
  • thay đổi người dùng/mật khẩu trong định nghĩa nguồn dữ liệu Tomcat trong context.xml

Khi tôi khởi động ứng dụng trong khi có hibernate.hbm2ddl.auto thiết lập để validate, tôi nhận được một ngoại lệ khi khuôn khổ cố gắng để tạo ra các EntityManagerFactory nói với tôi rằng một cái bàn bị thiếu. Khi tôi thực hiện một câu lệnh chọn trực tiếp trong một công cụ sql với myschema_app được kết nối, mọi thứ hoạt động tốt.

Tôi hiểu rằng việc sử dụng từ đồng nghĩa trên một bảng khác là minh bạch cho ứng dụng. Có ai là một ý tưởng những gì tôi có thể đã bỏ qua?

Trả lời

8

Tôi đoán là hbm2ddl tìm kiếm cụ thể cho các bảng chứ không phải cho các từ đồng nghĩa, nhưng ứng dụng của bạn thực sự hoạt động như thể các bảng đã tồn tại trong lược đồ. Hãy thử gỡ bỏ tùy chọn hbm2ddl và kiểm tra ứng dụng của bạn.

EDIT: có vẻ như tôi đoán là đúng: https://forum.hibernate.org/viewtopic.php?p=2438033

+0

Đó là một số câu trả lời nhanh chóng, 10 điểm giành được. Vâng, tôi đã thấy, bỏ qua tham số đó làm cho ứng dụng hoạt động, nhưng thật đáng tiếc là Hibernate không hỗ trợ các từ đồng nghĩa trong quá trình xác nhận, bởi vì tôi nghĩ rằng nó là một điều tốt để xác thực lược đồ lúc khởi động để đảm bảo nó phù hợp với ứng dụng . –

+0

Vấn đề ở lớp hibernates org.hibernate.tool.hbm2ddl.DatabaseMetadata trong đó các loại bảng được mã hóa cứng thành Chuỗi cuối cùng tĩnh riêng [] TYPES = {"TABLE", "VIEW"}; nơi thực sự cần là Chuỗi cuối cùng tĩnh riêng tư [] TYPES = {"TABLE", "VIEW", "ALIAS", "SYNONYM"}; – user482745