Какой драйвер mysql я использую с spring / hibernate? - PullRequest
5 голосов
/ 19 июля 2010

Немного запутано, ссылаются ли 'driverclassname' и 'hibernate.dialect' на драйвер mysql?

Что я должен использовать? Это разъем J, который я должен использовать?

<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 

Ответы [ 3 ]

21 голосов
/ 19 июля 2010

Немного запутано, ссылаются ли 'driverclassname' и 'hibernate.dialect' на драйвер mysql?

Нет, это не так.driverclassname ссылается, ну, в общем, на имя класса драйвера , которое является классом из данного драйвера JDBC, который реализует java.sql.Driver.Имя класса драйвера зависит от драйвера.

При использовании драйвера JDBC MySQL, также называемого MySQL Connector / J, этот класс com.mysql.jdbc.Driver, как объяснено в документации MySQL Connector / J:

20.3.4.1.Имена класса драйвера / источника данных, синтаксис URL и свойства конфигурации для Connector / J

Имя класса, который реализует java.sql.Driver в MySQL, Connector / J, составляет com.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, которое позволяет Hibernate генерировать SQL, оптимизированный для конкретной реляционной базы данных.

например full.classname.of.Dialect

В большинстве случаев Hibernate действительно сможет выбрать правильную реализацию org.hibernate.dialect.Dialect на основе метаданных JDBC, возвращаемых драйвером JDBC.

Для MySQL 5.х, вы должны использовать org.hibernate.dialect.MySQL5InnoDBDialect, если вы используете таблицы InnoDB (это будет моя рекомендация) или org.hibernate.dialect.MySQL5Dialect, если вы не используете.См. Раздел 3.4.1.Диалекты SQL для (не исчерпывающего) списка.

Последний момент, часть Maven, которую вы даже не упомянули в своем вопросе ... Драйвер JDBC MySQL доступен в центральном репозитории 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: я неЯ хочу помочь, но вы должны постараться использовать документацию по продуктам или платформам, которые вы используете.То, что вы спрашиваете в этом вопросе, хорошо документировано (как я показал) и может быть легко найдено.По моему мнению, научиться самостоятельно находить основную информацию - это фундаментальный навык для разработчика программного обеспечения.

1 голос
/ 19 июля 2010

относительно определения maven mysql, вот то, что, кажется, работает.

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.12</version>
</dependency>
0 голосов
/ 19 июля 2010

driverClassName должно ссылаться на имя класса драйвера JDBC, который вы хотите загрузить (как вы обычно делаете, используя Class#forName() в "обычном" JDBC). Тот, который вы в настоящее время указываете, подходит для драйвера JDBC MySQL ( Обновление : вы быстро отредактировали его в драйвер JDBC HSQLDB, это верно только для гиперзвуковой БД, но не для БД MySQL).

hibernate.dialect должен ссылаться на имя класса реализации Hibernate Dialect , которую вы хотели бы использовать для конкретной базы данных, чтобы Hibernate знал, что понимает рассматриваемая БД, чтобы он мог автоматически сгенерировать подходящие операторы SQL. Тот, который вы в настоящее время указываете, является правильным для базы данных MySQL.


Тем не менее, похоже, что у вас проблемы с этим. Возможно, вы не установили драйвер JDBC MySQL? Вы получаете ClassNotFoundException на это? Достаточно просто загрузить Connector / J , распаковать zip и поместить файл JAR в путь к классам во время выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...