Answers:
使用Oracle 10g语言。最近的JDBC驱动程序也需要Hibernate 3.3.2+(内部类结构已更改-症状将围绕抽象类发出抱怨)。
Oracle 11g的方言与Oracle 10g(org.hibernate.dialect.Oracle10gDialect)相同。来源:http : //docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/session-configuration.html#configuration-optional-dialects
根据受支持的数据库,尚未正式支持Oracle 11g。虽然,我相信您使用不会有任何问题org.hibernate.dialect.OracleDialect
。
org.hibernate.dialect.OracleDialect
已被弃用(docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/...)。您应该使用Oracle 10g方言。
方言(不建议使用)org.hibernate.dialect.Oracledialect
和Oracle 11g数据库使用 hibernate.hbm2ddl.auto = validate
模式时出现问题。
使用这种方言,Hibernate无法找到序列(由于该getQuerySequencesString()
方法的实现 ,它返回了以下查询:
"select sequence_name from user_sequences;"
执行将返回数据库的空结果)。
org.hibernate.dialect.Oracle9iDialect
由于getQuerySequencesString()
方法的不同实现,使用方言 或更高版本可以解决问题 :
"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;"
如果执行则返回所有序列。
至少在EclipseLink 10g和11g不同的情况下。从11g开始,不建议对分页查询使用first_rows提示。
请参阅“是否可以针对每个特定查询禁用jpa提示”。这种查询不应在11g中使用。
SELECT * FROM (
SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (
SELECT * FROM TABLES INCLUDING JOINS, ORDERING, etc.) a
WHERE ROWNUM <= 10 )
WHERE rnum > 0;
但是可能还有其他细微差别。