Hibernate方言Oracle数据库11g?

是否有Oracle数据库11g的Hibernate方言? 还是应该使用Hibernate附带的org.hibernate.dialect.Oracle10gDialect

使用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有任何问题。

我们使用hibernate.hbm2ddl.auto = validate模式时,(已弃用的)方言org.hibernate.dialect.Oracledialect和Oracle 11g数据库出了问题。

用这种方言Hibernate无法find序列(因为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;"

如果执行则返回所有的序列。

至less在EclipseLink 10g和11g的情况下有所不同。 自11g以来,不build议使用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; 

但是可以有其他的细微差别。

如果您正在使用WL 10,请使用以下内容:

org.hibernate.dialect.Oracle10gDialect