我是Hibernate的新手。在阅读Hibernate时,我遇到了Dialect属性。无论我们在应用程序中使用什么数据库,我们都需要设置与该数据库相关的方言,Hibernate将生成与该数据库相关的适当查询。
我的数据库引擎是'MySQL'。在hibernate配置文件中,如果我将方言指定为'Oracle',会发生什么?
答案 0 :(得分:0)
您可以通过在配置中设置方言来强制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使用不同的方言来尝试与数据库进行通信,它可能适用于简单的查询,但是当更复杂的查询时,它会很快失败尝试。