Мало перепутанный, '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
Я использую Знатока поэтому, если бы я могу получить драйвер от знатока, который был бы идеален.
При запущении моего приложения у кота я получаю ошибку:
Cannot create JDBC driver of class 'org.hsqldb.jdbcDriver' for connect URL
Немного запутался, относятся ли 'driverclassname' и 'hibernate.dialect' к драйверу mysql?
Нет, не относятся. driverclassname
относится к имени класса драйвера, который является классом данного JDBC драйвера, реализующего java.sql.Driver
. Имя класса драйвера зависит от конкретного драйвера.
При использовании JDBC драйвера MySQL aka MySQL Connector/J, этот класс - com.mysql.jdbc.Driver
, как объясняется в документации MySQL Connector/J:
20.3.4.1. Имена классов драйверов/источников данных, синтаксис URL и свойства конфигурации для Connector/J
Имя класса, реализующего.
java.sql.Driver
в MySQL Connector/J iscom.mysql.jdbc.Driver
. (...)
И на самом деле, они даже предоставляют инструкции по использованию своего драйвера с Spring. Смотрите раздел 20.3.5.2.4. Использование Connector/J с Spring.
Свойство hibernate.dialect
отличается, это свойство конфигурации используется для определения имени класса Hibernate org.hibernate.dialect.Dialect
, который позволяет Hibernate генерировать SQL, оптимизированный для конкретной реляционной базы данных. Опять же, это объясняется в документации Hibernate:
3.4. Необязательные свойства конфигурации
(...) Имя класса Hibernate
org.hibernate.dialect.Dialect
which позволяет Hibernate генерировать SQL оптимизированный для конкретной реляционной базы данных.например,
full.classname.of.Dialect
В большинстве случаев Hibernate будет действительно сможет выбрать правильный
org.hibernate.dialect.Dialect
реализацию на основе JDBC метаданных, возвращаемых драйвером JDBC.
Для MySQL 5.x следует использовать org.hibernate.dialect.MySQL5InnoDBDialect
, если вы используете таблицы InnoDB (это моя рекомендация) или org.hibernate.dialect.MySQL5Dialect
, если нет. См. раздел 3.4.1. Диалекты SQL для получения (неполного) списка.
Последний пункт, часть Maven, которую вы даже не упомянули в своем вопросе... Драйвер MySQL JDBC доступен в центральном репозитории Maven, и вам следует использовать поисковую систему репозитория (как я уже предлагал). Например, следующий запрос:
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: Я не хочу показаться грубым и рад помочь, но вы действительно должны попытаться использовать документацию продуктов или фреймворков, которые вы используете. То, о чем вы спрашиваете в этом вопросе, хорошо документировано (как я показал) и может быть легко найдено. Научиться находить базовую информацию самостоятельно - это фундаментальный навык для разработчика программного обеспечения, на мой взгляд.
В driverClassName
должно быть указано имя класса драйвера JDBC, который вы хотите загрузить (как вы обычно делаете, используя Class#forName()
в "простом" JDBC). Тот, который вы сейчас указываете, корректен для драйвера MySQL JDBC (Update: вы быстро отредактировали его на драйвер HSQLDB JDBC, это корректно только для Hypersonic DB, а не для MySQL DB).
В hibernate.dialect
должно быть указано имя класса реализации Hibernate Dialect, который вы хотите использовать для конкретной базы данных, чтобы Hibernate знал, что понимает данная БД, и мог автоматически генерировать подходящие SQL-запросы. Тот, который вы сейчас указываете, корректен для базы данных MySQL.
Тем не менее, похоже, что у вас с этим проблемы. Возможно, вы не установили драйвер MySQL JDBC? Вы получаете ClassNotFoundException
на него? Достаточно скачать Connector/J, распаковать zip и поместить JAR-файл в classpath среды выполнения.
относительно определения maven mysql, вот одно, которое, похоже, работает.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.12</version>
</dependency>