Saltar al contenido

¿Cuál es el nombre de la clase de dialecto MariaDB para Hibernate?

Si encuentras alguna parte que no comprendes puedes dejarlo en la sección de comentarios y trataremos de ayudarte tan rápido como podamos.

Solución:

Respuesta muy corta

Los dialectos actuales al momento de escribir este artículo son:

  • org.hibernate.dialect.MariaDB102Dialect para el servidor MariaDB 10,2
  • org.hibernate.dialect.MariaDB103Dialect para el servidor MariaDB 10.3 y posterior, proporciona soporte de secuencia.
  • org.hibernate.dialect.MariaDB10Dialect para el servidor MariaDB 10.0 y 10.1
  • org.hibernate.dialect.MariaDB53Dialect para el servidor MariaDB 5.3 y versiones posteriores 5.x.
  • org.hibernate.dialect.MariaDBDialect para el servidor MariaDB 5.1 y 5.2.

Respuesta corta

Cuando utilice un servidor MariaDB, debe use los dialectos MariaDB Connector / J y MariaDB Hibernate, no los de MySQL. Aunque MariaDB se creó como un reemplazo directo y aunque es probable que las características básicas funcionen cuando se usan las versiones de MySQL, pueden ocurrir problemas sutiles o puede perder ciertas características.

Actualmente, no se menciona una lista completa de los dialectos MariaDB disponibles en la Guía del usuario de Hibernate, sino en Hibernate JavaDoc. Dependiendo de la versión de su servidor MariaDB, debe seleccionar la versión de dialecto correspondiente. Los dialectos actuales al momento de escribir este artículo son:

  • org.hibernate.dialect.MariaDB102Dialect para el servidor MariaDB 10.2
  • org.hibernate.dialect.MariaDB103Dialect para el servidor MariaDB 10.3 y posterior, proporciona soporte de secuencia.
  • org.hibernate.dialect.MariaDB10Dialect para el servidor MariaDB 10.0 y 10.1
  • org.hibernate.dialect.MariaDB53Dialect para el servidor MariaDB 5.3 y versiones posteriores 5.x.
  • org.hibernate.dialect.MariaDBDialect para el servidor MariaDB 5.1 y 5.2.

Tenga en cuenta que para obtener información detallada sobre el uso, a veces tendrá que buscar en los códigos fuente del dialecto. (Hay comentarios de información de uso que no son de JavaDoc en algunas fuentes de dialectos).

Si desea cambiar o mencionar explícitamente el motor de almacenamiento para el dialecto MariaDB, puede usar el storage_engine Variable de hibernación. Por ejemplo: hibernate.dialect.storage_engine = innodb. En mi opinión, debe hacer esto explícitamente, porque el valor predeterminado puede cambiar cuando se cambia a una versión de servidor MariaDB diferente.

Si está utilizando un servidor MariaDB anterior a 10.1.2 (que no admite fracciones de segundo), es posible que desee proporcionar el parámetro useFractionalSeconds=false a la URL de JDBC; de lo contrario, MariaDB Connector / J no truncará las marcas de tiempo internamente, lo que puede causar un problema de comparación de tiempo cuando esos valores se usan en consultas de comparación (incluso cuando se usa JDBC simple), lo que puede causar problemas de versiones de Hibernate y problemas de bloqueo optimistas para el tiempo tipos.

Respuesta larga

El dialecto MariaDB para Hibernate (5.3 a partir de este escrito) se menciona en la Guía del usuario de Hibernate. Los “nombres cortos” del dialecto mencionado seguidos de comentarios son:

  • MariaDB: Soporte para la base de datos MariadB. Puede funcionar con versiones más nuevas

  • MariaDB53: Soporte para la base de datos MariadB, versión 5.3 y posteriores.

Sin embargo, se puede encontrar una lista completa de los dialectos oficiales de MariaDB disponibles en Hibernate JavaDoc. Que actualmente enumera:

  • org.hibernate.dialect.MariaDB102Dialect para el servidor MariaDB 10.2
  • org.hibernate.dialect.MariaDB103Dialect para el servidor MariaDB 10.3 y posterior, proporciona soporte de secuencia.
  • org.hibernate.dialect.MariaDB10Dialect para el servidor MariaDB 10.0 y 10.1
  • org.hibernate.dialect.MariaDB53Dialect para el servidor MariaDB 5.3 y versiones posteriores 5.x.
  • org.hibernate.dialect.MariaDBDialect para el servidor MariaDB 5.1 y 5.2.

Cada sucesor de dialecto hereda la configuración de la versión de dialecto anterior. Entonces, la jerarquía de herencia para MariaDB es: MariaDB103Dialect > MariaDB102Dialect > MariaDB10Dialect > MariaDB53Dialect > MariaDBDialect > MySQL5Dialect > MySQLDialect > Dialect

MariaDB fue diseñado como un reemplazo directo de MySQL. Pero es probable que las bases de datos diverjan con el paso del tiempo. La mayoría de las características básicas probablemente funcionen sin problemas, permitiéndole intercambiar clientes Connector / J (cliente MariaDB en el servidor MySQL y viceversa) y le permiten intercambiar dialectos (dialecto MySQL en el cliente MariaDB y viceversa). Pero existen diferencias sutiles que pueden causar problemas inesperados. Por ejemplo, el cliente MySQL Connector / J contiene comprobaciones codificadas para la versión del servidor, que fallarán al usar un servidor MariaDB, lo que provocará que algunas funciones se deshabiliten en el cliente, como el parámetro de cliente sendFractionalSeconds de MySQL. Esto hará que las fracciones de segundo se deshabiliten, por lo que las fracciones se truncarán en el cliente MySQL pero no en el cliente MariaDB. (Esto incluso puede llevar a problemas de bloqueo optimistas cuando se utilizan versiones con tipos de fecha / hora en combinación con tipos de fecha / hora de SQL que no son de precisión máxima. En estos casos, use la precisión máxima de 6.)

Además, se espera que el dialecto MariaDB proporcione una funcionalidad específica para MariaDB: http://in.relation.to/2017/02/16/mariadb-dialects/

Con el tiempo, agregaremos nuevos dialectos basados ​​en las nuevas capacidades introducidas por MariaDB.

Si está utilizando MariaDB, es mejor utilizar los dialectos específicos de MariaDB a partir de ahora, ya que es mucho más fácil hacer coincidir la versión de MariaDB con su dialecto de hibernación apropiado.

Y https://hibernate.atlassian.net/browse/HHH-11457 dice:

Dado que MySQL y MariaDB han ido en direcciones diferentes, es posible que también deseemos proporcionar dialectos MariaDB.

Por ejemplo, no es muy intuitivo para un usuario de Hibernate darse cuenta de que necesita usar MySQLInnoDb57Dialect para manejar las marcas de tiempo con precisión de microsegundos que han estado disponibles desde MariaDB 5.3:

La Guía del usuario de Hibernate no proporciona toda la información de uso sobre cómo usar los dialectos. Incluso la guía del usuario combinada con los documentos de la API puede no ser suficiente. A veces, tendrá que buscar en los códigos fuente la información de uso. Por ejemplo, MariaDB53Dialect.java contiene comentarios ocultos que no son de JavaDoc que pueden resultar útiles.

Anteriormente, para seleccionar un motor de almacenamiento MySQL, como MyISAM o InnoDB o por defecto, podía cambiar entre, por ejemplo MySQL57InnoDBDialect y MySQL57Dialect. Pero refactorizaron la jerarquía de dialectos de MySQL a partir de Hibernate 5.2.8, como se menciona en una publicación de blog de Hibernate. Tenga en cuenta que para seleccionar un motor de almacenamiento, debe utilizar una variable de entorno o una propiedad del sistema: hibernate.dialect.storage_engine. Por ejemplo: hibernate.dialect.storage_engine = innodb.

XtraDB era el motor de almacenamiento MariaDB predeterminado para MariaDB 10.1 y versiones anteriores, pero desde la 10.2 es InnoDB. Por lo tanto, puede haber casos en los que desee mencionar explícitamente el motor de almacenamiento que selecciona Hibernate, por lo que tendrá que usar el storage_engine variable. Información sobre el storage_engine variable (que no se menciona en la Guía del usuario), se puede encontrar en la fuente de AvailableSettings.java.

Si está utilizando un servidor MariaDB anterior a 10.1.2 (que no admite fracciones de segundo), es posible que desee proporcionar el parámetro useFractionalSeconds=false a la URL de JDBC; de lo contrario, MariaDB Connector / J no truncará las marcas de tiempo internamente, lo que puede causar problemas de comparación de tiempo, lo que puede causar problemas de versiones de Hibernate y problemas de bloqueo optimistas para tipos temporales.

Como se anunció aquí, comenzando con Hibernate ORM 5.2.8 (alrededor del 15 de febrero de 2017), los dialectos

org.hibernate.dialect.MariaDB53Dialect

y

org.hibernate.dialect.MariaDBDialect

están disponibles. El anuncio concluye que

Si está utilizando MariaDB, es mejor utilizar los dialectos específicos de MariaDB a partir de ahora, ya que es mucho más fácil hacer coincidir la versión de MariaDB con su dialecto de hibernación apropiado.

A partir de aquí, se mencionó “debe ser MySQL5InnoDBDialect o MySQL57InnoDBDialect en lugar de MySQLInnoDBDialect”

Para obtener una lista completa, consulte http://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#database-dialect

El nuevo dialecto MariaDB se agrega en 5.2.17. Ver JIRA y comprometerse

Si te animas, eres capaz de dejar un enunciado acerca de qué le añadirías a este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *