有点困惑,是'driverclassname'和'hibernate.dialect'都指的是mysql驱动程序?
我应该使用什么? connectorJ是我应该使用的吗?
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.hsqldb.jdbcDriver"/>
<property name="url" value="jdbc:mysql://localhost/blah"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
我正在使用Maven,所以如果我能从maven那里获得理想的驱动程序。
在tomcat中运行我的应用程序我收到错误:
Cannot create JDBC driver of class 'org.hsqldb.jdbcDriver' for connect URL
答案 0 :(得分:21)
有点困惑,是'driverclassname'和'hibernate.dialect'都指的是mysql驱动程序?
不,他们不是。 driverclassname
指的是驱动程序类名称,它是来自实现java.sql.Driver
的给定JDBC驱动程序的类。驱动程序类名称是特定于驱动程序的。
当使用MySQL的JDBC驱动程序(即MySQL Connector / J)时,此类为com.mysql.jdbc.Driver
,如MySQL Connector / J文档中所述:
20.3.4.1. Driver/Datasource Class Names, URL Syntax and Configuration Properties for Connector/J
实现的类的名称 MySQL Connector / J中的
java.sql.Driver
是com.mysql.jdbc.Driver
。 (...)
实际上,他们甚至提供了使用Spring驱动程序的说明。请参阅20.3.5.2.4. Using Connector/J with Spring部分。
hibernate.dialect
不同,此配置属性用于定义 Hibernate org.hibernate.dialect.Dialect
的类名,它允许Hibernate生成针对特定关系数据库优化的SQL 。 Hibernate文档中也解释了这一点:
3.4. Optional configuration properties
(...)Hibernate的类名
org.hibernate.dialect.Dialect
哪个 允许Hibernate生成SQL 针对特定关系进行了优化 数据库中。例如
full.classname.of.Dialect
在大多数情况下,Hibernate实际上会 能够选择正确的
org.hibernate.dialect.Dialect
基于JDBC的实现 JDBC驱动程序返回的元数据。
对于MySQL 5.x,如果您使用的是InnoDB表(这是我的建议),则应使用org.hibernate.dialect.MySQL5InnoDBDialect
;如果不是,则应使用org.hibernate.dialect.MySQL5Dialect
。有关(非详尽的)列表,请参阅3.4.1. SQL Dialects部分。
最后一点,您在问题中甚至没有提到的Maven部分...... Maven中央存储库中提供了MySQL JDBC驱动程序,您应该使用repository search engine(I already suggested )。例如,以下查询:
http://www.jarvana.com/jarvana/search?search_type=project&project=mysql
允许通过两次点击找到最终版本的maven坐标:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.13</version>
</dependency>
PS:我不是故意粗鲁,我很乐意提供帮助,但您应该尝试利用您正在使用的产品或框架的文档。您在这个问题中提出的问题已经有详细记录(如我所示)并且可以轻松找到。在我看来,学习自己寻找基本信息是软件开发人员的基本技能。
答案 1 :(得分:1)
关于maven mysql定义,这里似乎有效。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.12</version>
</dependency>
答案 2 :(得分:0)
driverClassName
应该引用您要加载的JDBC驱动程序的类名(正如您通常在“普通”JDBC中使用Class#forName()
那样)。您当前指定的那个对于MySQL JDBC驱动程序是正确的(更新:您很快将其编辑为HSQLDB JDBC驱动程序,这仅适用于Hypersonic数据库,而不适用于MySQL数据库)
hibernate.dialect
应该是指您想要用于特定数据库的Hibernate Dialect实现的类名,以便Hibernate知道所讨论的数据库是什么,以便它可以自动生成合适的SQL语句。您当前指定的那个对于MySQL数据库是正确的。
那就是说,听起来你遇到了问题。可能你还没有安装MySQL JDBC驱动程序?你收到ClassNotFoundException
吗?只需下载Connector/J,解压缩并将JAR文件放在运行时类路径中就足够了。