在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。
答案 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