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