simple example mysql hibernate hsqldb

example - hibernate.dialect mysql



Campo de texto que es compatible en mysql y hsqldb (4)

Lo que funcionó para mí fue simplemente habilitar el modo de compatibilidad de MySQL cambiando la URL de conexión a jdbc: hsqldb: mem: testdb; sql.syntax_mys = true

Tengo una aplicación que utiliza una base de datos mysql pero me gustaría ejecutar las pruebas unitarias para la aplicación en una base de datos en memoria hsqldb. El problema es que algunos de mis objetos de modelo persistente tienen campos que he anotado como columnDefinition = "TEXT" para forzar a mysql a atender los valores de cadenas largas, pero ahora hsqldb no sabe qué significa TEXT. Si lo cambio a CLOB, hsqldb está bien, pero mysql falla.

¿Existe una definición de columna estándar que pueda usar para cadenas largas que sea compatible con mysql AND hsqldb?


Puede utilizar la misma solución que se ofrece en esta publicación para las columnas TEXTO de PostgreSQL y HSQLDB con Hibernate:

Hibernación postgresql / hsqldb TEXTO problema de incompatibilidad de columnas

Como HSQLDB le permite definir TEXTO como TIPO o DOMINIO, esto puede ser una solución si descubre cómo ejecutar una declaración como la que se muestra a continuación antes de cada prueba con HSQLDB a través de Hibernate.

CREATE TYPE TEXT AS VARCHAR(1000000)

Actualización para HSQLDB 2.1 y posterior: esta versión admite un modo de compatibilidad con MySQL. En este modo, el tipo de MySQL TEXT es compatible y traducido a LONGVARCHAR. LONGVARCHAR es por defecto un VARCHAR largo, pero una propiedad (sql.longvar_is_lob) permite que se interprete como CLOB. Ver:

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_sql_conformance

http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_mysql


Realmente no. MySQL tiene TEXT y BLOB, con prefijos de varios tamaños para indicar su tamaño máximo. hsqldb solo parece tener clob y varios varchars. Lo más probable es que tengas que evaluar tus pruebas dependiendo de la base de datos con la que estés hablando.

Si sus cadenas de texto son lo suficientemente cortas, puede usar varchars, pero están limitados a solo 64k en mysql, y ese es el tamaño máximo de una fila, por lo que cuanto mayor sea el varchar, menos espacio habrá para otros campos.


También puede resolver algunos problemas en el nivel del proveedor de JPA (Hibernate, etc.).

Con @Lob, por ejemplo, el tipo largo / grande se determina en tiempo de ejecución según el proveedor (longvarchar / longtext MySql vs clob en H2).