1

许多文档中我发现我们必须定义方言hibernate.cfg.xml来告诉hibernate我们将使用什么语言或hibernate。在这个基础上hibernate会生成相应的sql。

<property name="hibernate.conection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dilect">org.hibernate.dialect.MySQLDilect</property>

更重要的是,任何数据库提供程序都可能有多个驱动程序,并且对于任何驱动程序,根据其版本可能有多种方言。

我的观点是,即使我们已经在那里提到了驱动程序(唯一),而且我们是单一版本的 jar,那么为什么这不仅足以生成 sql。

4

3 回答 3

0

方言是可选的配置选项。通常hibernate可以根据数据库连接自动检测方言。

但在某些情况下,您可能需要不同的方言——不同版本的数据库可能需要不同的方言。- 自定义/修正方言并指定它。

于 2016-06-30T00:24:23.597 回答
0

您是否假设驱动程序是唯一的并且可用于确定要连接的数据库?好吧,您可以拥有许多支持同一数据库的驱动程序类。可能是 MySQL现在有一个通用驱动程序,但考虑 Oracle。

Oracle有很多驱动程序。检查这个http://www.oracle.com/technetwork/java/index-136695.html

如果 Hibernate 必须使用您指定的任何一种可能的驱动程序,它如何知道要使用哪种方言(SQL 语法)?因此,您需要将 Driver 类和 Dialect 都指定为 Hibernate。

于 2016-06-30T00:30:32.490 回答
0

连接驱动类仅指出数据库管理系统 (DBMS) 供应商。因为一个 DBMS,供应商有很多版本,每个版本都有一组特定的功能。到那时,每个 DBMS 添加更多功能。例如:

甲骨文

Oracle 8i(1999 年发布)使用org.hibernate.dialect.Oracle8iDialect

Oracle 9i(2001 年发布)使用org.hibernate.dialect.Oracle9iDialect

Oracle 10g(2003年发布)使用org.hibernate.dialect.Oracle10gDialect

Oracle 11g(2007年发布)使用org.hibernate.dialect.Oracle10gDialect

Oracle 12c(2013 年发布)使用org.hibernate.dialect.Oracle12cDialect

这是当前版本的方言的完整列表: https ://docs.jboss.org/hibernate/orm/current/javadocs/org/hibernate/dialect/package-summary.html

于 2016-06-30T01:38:03.250 回答