为啥 hibernate 严格要求定义 hibernate.dialect 属性,而 JPA 规范没有强制要求?

Posted

技术标签:

【中文标题】为啥 hibernate 严格要求定义 hibernate.dialect 属性,而 JPA 规范没有强制要求?【英文标题】:Why does hibernate strictly asks to define the hibernate.dialect property while the JPA specification doesn't makes it mandatory?为什么 hibernate 严格要求定义 hibernate.dialect 属性,而 JPA 规范没有强制要求? 【发布时间】:2017-12-18 03:18:16 【问题描述】:

在学习使用 hibernate 的 java 持久性时,我发现 hibernate 强制定义方言属性。我很困惑 SQL 是通用语言,它用于数据库通信,为什么我们要为不同的数据库使用不同的方言?为什么hibernate要严格要求定义方言而JPA规范不关心它?

【问题讨论】:

【参考方案1】:

通常休眠 不需要设置hibernate.dialect属性。

看看文档在第 7.12 章中是怎么说的:http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#database-dialect

7.12。数据库方言

虽然 SQL 相对标准化,但每个数据库供应商都使用一个 ANSI SQL 定义语法的子集和超集。这被称为 数据库的方言。 Hibernate 处理这些变化 方言通过它的 org.hibernate.dialect.Dialect 类和 每个数据库供应商的各种子类。

在大多数情况下,Hibernate 将能够确定正确的方言 在使用过程中通过询问 JDBC Connection 的一些问题来使用 引导程序。有关 Hibernate 确定 使用正确的方言(以及您影响该决议的能力), 请参阅方言解析。

如果由于某种原因无法确定正确的人或您 要使用自定义方言,您需要设置 hibernate.dialect 设置。

【讨论】:

谢谢西蒙。这非常有用。

以上是关于为啥 hibernate 严格要求定义 hibernate.dialect 属性,而 JPA 规范没有强制要求?的主要内容,如果未能解决你的问题,请参考以下文章

一对一映射 Hibernate

初始 SessionFactory 创建 failed.java.lang.NoClassDefFoundError: org/hiber nate/cfg/Configuration

为啥“使用严格”导致函数未定义

为啥我的函数在严格模式(函数形式)下未定义?

Hibernate- Criteria 简易

关于Hibernate的查询