Что такое имя класса диалекта MariaDB для Hibernate?

на Hibenate Я использую MariaDB в но я не смог найти имя класса диалекта MariaDB в .

в спящем режиме имя диалекта MySQL5 -

<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>

для Oracle 10g

<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>

Как называется класс диалекта для MariaDB в?

4 ответов


As здесь, начиная с Hibernate ORM 5.2.8 (около 15 февраля 2017 года), диалекты

org.hibernate.dialect.MariaDB53Dialect

и

org.hibernate.dialect.MariaDBDialect

доступны. В объявлении делается вывод, что

Если вы используете MariaDB, лучше всего использовать MariaDB-specific Диалекты отныне, так как это гораздо проще, чтобы соответствовать MariaDB версия с соответствующим диалектом Hibernate.


вы должны использовать Mysql5Dialect, потому что MariaDB на 100% совместим с mysql.


с здесь, было упомянуто "это должен быть MySQL5InnoDBDialect или MySQL57InnoDBDialect вместо MySQLInnoDBDialect"

полный список см. В разделе http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#database-dialect

новый диалект MariaDB добавлен в 5.2.17. См.Джира и commit


TL; DR

при использовании сервера MariaDB, вы должны используйте диалекты MariaDB Connector/J и MariaDB Hibernate, а не MySQL. Несмотря на то, что MariaDB был создан в качестве замены и даже несмотря на то, что основные функции, вероятно, будут работать при использовании версий MySQL, могут возникнуть тонкие проблемы или вы можете пропустить некоторые функции.

полный список доступных диалектов MariaDB в настоящее время не упоминается в руководстве пользователя Hibernate, но в Спящий Режим JavaDoc. В зависимости от версии MariaDB необходимо выбрать соответствующую диалектную версию.

обратите внимание, что для получения подробной информации об использовании вам иногда придется искать в исходных кодах диалекта. (В некоторых источниках диалекта есть комментарии к информации об использовании не JavaDoc.)

если вы хотите изменить или явно упомянуть механизм хранения для диалекта MariaDB, вы можете использовать storage_engine переменная Hibernate. Например: hibernate.dialect.storage_engine = innodb. IMO, вы должны сделать это явно, потому что значение по умолчанию может измениться при переключении на другую версию сервера MariaDB.

если вы используете сервер MariaDB старше 10.1.2 (который не поддерживает дробные секунды), то вы можете предоставить параметр useFractionalSeconds=false к URL-адресу JDBC, иначе MariaDB Connector/J не будет усекать временные метки внутри, что может вызвать проблему сравнения времени, когда эти значения используются в запросах сравнения (даже при использовании plain JDBC), что может вызвать проблемы с управлением версиями Hibernate и оптимистичные проблемы блокировки для временных типов.

подробный ответ!--13-->

диалект MariaDB для спящего режима (5.3 на момент написания этой статьи) упоминается в Руководство Пользователя Hibernate. Упомянутый диалект "короткие имена" с последующими замечаниями:

  • MariaDB: поддержка базы данных MariadB. Может работать с более новыми версиями

  • MariaDB53: поддержка базы данных MariadB версии 5.3 и новее.

тем не менее, полный список доступных официальных диалектов MariaDB можно найти в Спящий Режим JavaDoc. Который в настоящее время перечисляет:

  • org.зимовать.диалект.MariaDB102Dialect: MariaDB 10.2
  • org.зимовать.диалект.MariaDB103Dialect: MariaDB 10.3 и более поздних версий, обеспечивает последовательность поддержка.
  • org.зимовать.диалект.MariaDB10Dialect
  • org.зимовать.диалект.MariaDB53Dialect: MariaDB 5.3
  • org.зимовать.диалект.MariaDBDialect

каждый преемник диалекта наследует настройки из предыдущей версии диалекта. Поэтому иерархия наследования для MariaDB является: MariaDB103Dialect > MariaDB102Dialect > MariaDB10Dialect > MariaDB53Dialect > MariaDBDialect > MySQL5Dialect > MySQLDialect > Dialect

MariaDB был разработан как drop-in замена для MySQL. Но со временем базы данных, скорее всего, будут расходиться. Наиболее основные функции, вероятно, работают без проблем, позволяя вам менять клиенты Connector/J (клиент MariaDB на сервере MySQL и наоборот), и позволяют менять диалекты (диалект MySQL на клиенте MariaDB и наоборот). Но есть тонкие различия, которые могут вызвать неожиданные проблемы. Например, клиент MySQL Connector / J содержит жестко закодированные проверки для версии сервера, которая завершится неудачей при использовании сервера MariaDB, в результате чего некоторые функции будут отключены в клиенте, такие как MySQL параметр клиента sendFractionalSeconds. Это приведет к отключению дробных секунд, поэтому дроби будут усечены в клиенте MySQL, но не в клиенте MariaDB. (Это может даже привести к оптимистичным проблемам блокировки при использовании управления версиями с типами даты/времени в сочетании с типами даты/времени SQL без максимальной точности. В этих случаях используйте максимальную точность 6.)

кроме того, ожидается, что диалект MariaDB обеспечит определенную функциональность для MariaDB в: http://in.relation.to/2017/02/16/mariadb-dialects/

со временем мы добавим новые диалекты на основе новых возможностей введен версию MariaDB.

...

если вы используете MariaDB, лучше всего использовать MariaDB-specific Диалекты отныне, так как это гораздо проще, чтобы соответствовать MariaDB версия с соответствующим диалектом Hibernate.

и https://hibernate.atlassian.net/browse/HHH-11457 говорит:

поскольку MySQL и MariaDB пошли в разных направлениях, мы могли бы хотите предоставить MariaDB Dialects также.

например, это не очень интуитивно для пользователя Hibernate, чтобы понять из того, что им нужно использовать MySQLInnoDb57Dialect для обработки Метки времени с точностью до микросекунды, которые были доступны с тех пор MariaDB 5.3:

в Руководство пользователя Hibernate не предоставляет всю информацию об использовании диалектов. Даже руководство пользователя в сочетании с документами API может быть недостаточно. Иногда вам придется искать информацию об использовании в исходных кодах. Например, MariaDB53Dialect.java содержит скрытые комментарии без JavaDoc, которые могут быть полезны.

ранее, чтобы выбрать механизм хранения MySQL, такой как MyISAM или InnoDB или default, вы могли переключаться между, например,MySQL57InnoDBDialect и MySQL57Dialect. Но они улучшили иерархии диалект MySQL начиная с гибернации 5.2.8, как указано в Hibernate сообщение в блоге. Обратите внимание, что для выбора механизма хранения следует использовать переменную среды или системное свойство: hibernate.dialect.storage_engine. Например: hibernate.dialect.storage_engine = innodb.

XtraDB был механизмом хранения MariaDB по умолчанию для MariaDB 10.1 и ранее, но с 10.2 это InnoDB. Таким образом, могут быть случаи, когда вы хотите явно упомянуть механизм хранения, который спящий режим выбирает, поэтому вам придется использовать storage_engine переменной. Информация о storage_engine переменная (которая не упоминается в руководстве пользователя), может быть найдена в источнике AvailableSettings.java.

если вы используете сервер MariaDB старше 10.1.2 (который не поддерживает дробные секунды), то вы можете предоставить параметр useFractionalSeconds=false к URL JDBC, в противном случае MariaDB Connector / J не будет усекать временные метки внутри, что может вызвать проблему сравнения времени, которая может вызывают проблемы с управлением версиями Hibernate и оптимистичные проблемы блокировки для временных типов.