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
应该不会有任何问题。
我们在使用(已弃用的)方言
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;"
如果执行则返回所有序列。
至少在 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;
但可能还有其他细微差别。
如果您使用 WL 10,请使用以下内容:
org.hibernate.dialect.Oracle10gDialect
提供这方面的最新进展。 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=****