为什么我们需要定义dilect,当我们已经在hibernate中的配置文件中定义了驱动程序

时间:2016-06-30 00:12:48

标签: java hibernate hibernate.cfg.xml

many文档中我发现我们必须在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。

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

Oracle有许多驱动程序。请检查此http://www.oracle.com/technetwork/java/index-136695.html

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

答案 2 :(得分:0)

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

<强>的Oracle

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