休眠方言 - 不匹配

Hibernate Dialect - mismatch

我是 Hibernate 新手。在阅读 Hibernate 时,我遇到了方言 属性。无论我们将在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate 将生成与该数据库相关的适当查询。

我的数据库引擎是 'MySQL'。在休眠配置文件中,如果我将方言指定为 'Oracle',会发生什么情况?

您可以通过在配置中设置方言来强制 Hibernate 使用某种方言。 Hibernate 将使用您告诉它使用的方言。如果您错误地指定了方言,那么 Hibernate 将尝试 运行(最有可能)对目标数据库无效 SQL。

因此,如果您要连接到 MySQL 数据库,但您说 Hibernate 应该使用 Oracle 方言,Hibernate 将尝试 运行 Oracle 查询 MySQL。对于简单的事情,这 可能 有效,但是一旦您开始进行更复杂的查询,SQL 在语法上将不正确,并且会失败。

最好的选择就是不要select方言。 Hibernate 将根据建立连接时获取的数据库元数据自动选择要使用的最佳方言。这是最好的选择,因为相似的方言之间存在差异(MySQLDialectMySQL5Dialect实际上需要不同的格式SQL)。

然而,这可能有点误导,因为如果您的数据库连接因无效 credentials/URL 而失败,则堆栈跟踪消息为:

org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set

这可能会导致您误认为您的方言确实需要设置,但 Hibernate 实际上是在说它无法在没有有效连接的情况下检测要使用的方言。

所以要重复,你可以强制Hibernate使用不同的方言来尝试与你的数据库通信,它可能适用于简单的查询,但很快就会失败当尝试更复杂的查询时。