我是休眠的新手。在阅读 Hibernate 时,我遇到了 Dialect 属性。无论我们将在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate 将生成与该数据库相关的适当查询。
我的数据库引擎是“MySQL”。在休眠配置文件中,如果我将方言指定为“Oracle”,会发生什么?
您可以通过在配置中设置方言来强制 Hibernate 使用某种方言。Hibernate 将使用您告诉它使用的方言。如果您错误地指定了方言,那么 Hibernate 将尝试对目标数据库运行(很可能)无效的 SQL。
因此,如果您要连接到 MySQL 数据库,但您说 Hibernate 应该使用 Oracle 方言,那么 Hibernate 将尝试对 MySQL 运行 Oracle 查询。对于简单的事情,这可能会起作用,但是一旦您开始获得更复杂的查询,SQL 将不会在语法上正确并且会严重失败。
最好的选择是不选择方言。Hibernate 将根据设置连接时获取的数据库元数据自动选择要使用的最佳方言。这是最好的选择,因为相似的方言之间存在差异(MySQLDialect
实际上MySQL5Dialect
需要不同格式的 SQL)。
然而,这可能会有点误导,因为如果您的数据库连接由于无效的凭据/URL 而失败,则堆栈跟踪消息是:
org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set
这可能会导致您错误地认为确实需要设置您的方言,但 Hibernate 的实际意思是,如果没有有效的连接,它就无法检测到要使用的方言。
所以要重新迭代,你可以强制 Hibernate 使用不同的方言来尝试与你的数据库通信,它可能适用于简单的查询,但在尝试更复杂的查询时会很快失败。