【问题标题】:Hibernate Dialect - mismatch休眠方言 - 不匹配
【发布时间】:2015-06-11 10:51:33
【问题描述】:

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

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

【问题讨论】:

  • 这是一个面试问题,我已经浏览过那个链接,我需要休眠行为的具体答案。

标签: hibernate dialect


【解决方案1】:

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

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

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

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

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

这可能会导致您错误地认为确实需要设置您的方言,但 Hibernate 的实际意思是,如果没有有效的连接,它无法检测到要使用的方言。

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

【讨论】:

    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2020-01-03
    相关资源
    最近更新 更多