2014-12-11 2 views
0

Я использую hibernate 4.2.1 и MySQL 5.5.Hibernate MySQLMyISAMDialect не работает?

В persistence.xml у меня есть это:

<!-- ... --> 
<properties> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLMyISAMDialect" /> 

</properties> 

Но когда я бегу мое PROJET моя база данных не содержит таблицу!

Кто-нибудь есть идеи?! Thanks

ответ

0

Удалите диалектную линию из вашей конфигурации полностью.

Hibernate может определить, какой диалект использовать на основе базовых метаданных базы данных при условии, что вы дадите ему правильное имя пользователя/пароль. У меня никогда не было проблемы с Hibernate, автоматически определяющим мою версию базы данных. Это особенно полезно для MySQL, поскольку MySQL имеет разные версии диалектов, которые он может использовать.

Если вы видите следующее исключение

org.hibernate.HibernateException: Connection cannot be null when 'hibernate.dialect' not set 

Это означает, что ваше имя пользователя/пароль неверен, и Hibernate не может подключиться к базе данных, на самом деле читать метаданные, чтобы выбрать свой собственный диалект.

Я обнаружил, что проще настроить таблицы базы данных с помощью SQL-скриптов, а затем получить Hibernate до validate вашей схемы. Получение Hibernate для создания любой структуры базы данных (с использованием create-update или просто update) не рекомендуется для рабочей среды, поскольку вы теряете контроль над настройкой базы данных.

TL; DR: Позвольте Hibernate выбрать свой собственный диалект. Это сэкономит вам часы суеты.

+0

Спасибо за ваш ответ, я уже удалил строку диалекта из моего persistence.xml, но hibernate все равно генерирует мне базу данных хранилища InnoDB !. Если я также удалю это: <свойство name = "hibernate.show_sql" value = "true" /> \t \t \t <свойство name = "hibernate.hbm2ddl.auto" value = "update" />. Спасибо – BOSS

+0

Нет, если Hibernate использует диалоги InnoDB, то ваша база данных использует InnoDB Storage Engine, а не старый механизм хранения ISAM. Его настройка в вашей базе данных. Но ISAM - это более старая технология, чем InnoDB. – JamesENL

Смежные вопросы