Hibernate方言-不匹配

Hibernate方言-不匹配,hibernate,dialect,Hibernate,Dialect,我刚开始冬眠。在阅读Hibernate时,我偶然发现了方言属性。无论我们在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate将生成与该数据库相关的适当查询 我的数据库引擎是“MySQL”。在hibernate配置文件中,如果我将方言指定为“Oracle”,会发生什么情况?您可以通过在配置中设置方言来强制hibernate使用某种方言。Hibernate将使用您告诉它使用的方言。如果指定的方言不正确,Hibernate将尝试对目标数据库运行(很可能)无效的SQL 因此

我刚开始冬眠。在阅读Hibernate时,我偶然发现了方言属性。无论我们在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate将生成与该数据库相关的适当查询


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

您可以通过在配置中设置方言来强制hibernate使用某种方言。Hibernate将使用您告诉它使用的方言。如果指定的方言不正确,Hibernate将尝试对目标数据库运行(很可能)无效的SQL

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

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

但是,这可能有点误导,因为如果您的数据库连接由于无效凭据/URL而失败,stacktrace消息是:

org.hibernate.HibernateException:未设置“hibernate.dial”时,连接不能为空
这可能会导致您错误地认为您的方言确实需要设置,但Hibernate实际上说的是,如果没有有效的连接,它无法检测要使用的方言


因此,要重新迭代,您可以
强制Hibernate使用不同的方言来尝试与数据库通信,这可能适用于简单的查询,但在尝试更复杂的查询时会很快失败。

这是一个采访问题,我已经通过了该链接,我需要关于冬眠行为的具体答案。