在使用hibernate了解java持久性时,我发现hibernate强制定义了dialect属性。我很困惑,SQL是通用语言,它用于数据库通信,我们为什么要为不同的数据库使用不同的方言呢?为什么hibernate应该严格要求定义方言,而JPA规范不关心它?
通常Hibernate不需要设置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连接的一些问题来确定要使用的正确方言。有关Hibernate确定要使用的正确方言的能力(以及影响该分辨率的能力)的信息,请参阅方言分辨率。
如果由于某种原因无法确定正确的方法,或者您想使用自定义方言,则需要设置hibernate.dialect设置。