Có phương ngữ Hibernate cho Cơ sở dữ liệu Oracle 11g không? Hay tôi nên sử dụng những org.hibernate.dialect.Oracle10gDialect
cái có sẵn với Hibernate?
Có phương ngữ Hibernate cho Cơ sở dữ liệu Oracle 11g không? Hay tôi nên sử dụng những org.hibernate.dialect.Oracle10gDialect
cái có sẵn với Hibernate?
Câu trả lời:
Sử dụng phương ngữ Oracle 10g. Ngoài ra Hibernate 3.3.2+ là cần thiết cho các trình điều khiển JDBC gần đây (cấu trúc lớp bên trong đã thay đổi - các triệu chứng sẽ than vãn về một lớp trừu tượng).
Phương ngữ của Oracle 11g giống với Oracle 10g ( org.hibernate.dialect.Oracle10gDialect ). Nguồn: http://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects
Theo cơ sở dữ liệu được hỗ trợ , Oracle 11g không được hỗ trợ chính thức. Mặc dù, tôi tin rằng bạn sẽ không gặp bất kỳ vấn đề gì khi sử dụng org.hibernate.dialect.OracleDialect
.
org.hibernate.dialect.OracleDialect
không được dùng nữa ( docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/… ). Bạn nên sử dụng phương ngữ Oracle 10g.
Chúng tôi đã gặp sự cố với chế độ org.hibernate.dialect.Oracledialect
sử dụng phương ngữ (không được dùng nữa) và cơ sở dữ liệu Oracle 11g hibernate.hbm2ddl.auto = validate
.
Với phương ngữ này, Hibernate không thể tìm thấy các trình tự (bởi vì việc triển khai getQuerySequencesString()
phương thức, trả về truy vấn này:
"select sequence_name from user_sequences;"
mà việc thực thi trả về một kết quả trống từ cơ sở dữ liệu).
Sử dụng phương ngữ org.hibernate.dialect.Oracle9iDialect
, hoặc lớn hơn, giải quyết vấn đề, do một getQuerySequencesString()
phương pháp triển khai khác :
"select sequence_name from all_sequences union select synonym_name from all_synonyms us, all_sequences asq where asq.sequence_name = us.table_name and asq.sequence_owner = us.table_owner;"
thay vào đó trả về tất cả các chuỗi nếu được thực thi.
Ít nhất trong trường hợp EclipseLink 10g và 11g khác nhau. Vì 11g, không nên sử dụng gợi ý first_rows cho các truy vấn phân trang.
Xem "Có thể tắt gợi ý jpa cho mỗi truy vấn cụ thể không" . Không nên dùng câu truy vấn như vậy trong 11g.
SELECT * FROM (
SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (
SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
WHERE ROWNUM <= 10 )
WHERE rnum > 0;
Nhưng có thể có những sắc thái khác.
chỉ sử dụng org.hibernate.dialect.OracleDialect Loại bỏ 10g, 9, v.v.