Oracle 数据库 11g 的 Hibernate 方言?

问题描述 投票:0回答:6

Oracle 数据库 11g 是否有 Hibernate 方言?或者我应该使用 Hibernate 附带的

org.hibernate.dialect.Oracle10gDialect

oracle hibernate oracle11g
6个回答
117
投票

使用 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


14
投票

根据支持的数据库,Oracle 11g 并未得到官方支持。不过,我相信您使用

org.hibernate.dialect.OracleDialect
应该不会有任何问题。


4
投票

我们在使用(已弃用的)方言

org.hibernate.dialect.Oracledialect
和使用
hibernate.hbm2ddl.auto = validate
模式的 Oracle 11g 数据库时遇到问题。

使用这种方言,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;"

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


2
投票

至少在 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;

但可能还有其他细微差别。


0
投票

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

org.hibernate.dialect.Oracle10gDialect


0
投票

提供这方面的最新进展。 SpringBoot-3.1.4不需要显式配置Dialect和JDBC驱动程序。它会自动处理。

您可以从 application.properties 中删除以下行

spring.datasource.driver.class-name=oracle.jdbc.OracleDriver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

仅以下属性就足够了:

spring.datasource.url=****
spring.datasource.username=***
spring.datasource.password=****
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.