Tengo un problema al utilizar Hibernate y PostgreSQL para la producción y HSQLDB para la prueba.
Estoy usando un enfoque descendente que permite a Hibernate crear el esquema de la base de datos.
También estoy usando anotaciones; parte mapeo de hibernate.cfg.xml sólo contiene líneas como
<mapping class="package.subpackage.ClassName" />
las variables por defecto de Cuerda Hibernate para diferentes caracteres (255) en PostgreSQL que no es suficiente para mí en algunos casos, por lo que tengo que redefinir algunas columnas utilizando manualmente
@Column(columnDefinition = "TEXT")
.
Pero, el tipo de texto no es válido para HSQLDB, por lo que esas tablas no se pueden crear.
¿Alguien puede ayudar a resolver esto?Hibernate postgresql/hsqldb Problema de incompatibilidad de columna TEXT
Respuesta
La manera más fácil de hacer frente a este problema específico es, probablemente, a no usar el ColumnDefinition en absoluto y en lugar de especificar explícitamente la longitud de la columna con (por ejemplo)
@Column(length=10000)
También podría ser que en su lugar podría asignarlo con @Lob (tipo = LobType.CLOB)
pero no estoy seguro de que sea compatible correctamente en HSQLDB. En Postgres debería darle su tipo de TEXTO.
Sí, gracias, la duración es suficiente. – Nemanja
Sí, esta es la solución más simple, pero preferiría el uso de HSQLDB con el modo de compatibilidad postgres. –
Sí, tiene problema realmente grande.
NO USE UN MOTOR DE BASE DE DATOS PARA LAS PRUEBAS, Y OTRO PARA LA PRODUCCIÓN.
Puedes encontrar problemas que nunca soñaste.
Sí, gracias, tenía eso en mente y organicé pruebas para que puedan ejecutarse fácilmente en ambas bases de datos. Pero recientemente tuve este pequeño cambio y hsqldb comenzó a crear problemas. – Nemanja
Sí y no. De acuerdo en que el entorno de prueba ** debe ser ** exactamente como el entorno de producción. Pero las pruebas unitarias son algo diferente: el uso de una base de datos en memoria (como Apache Derby o HSQLDB) está perfectamente bien. Y lo que es más: tiene muchas ventajas. –
Este comentario es probablemente el mejor argumento para usar más de un motor de base de datos para pruebas y producción, teniendo en cuenta el tipo de proyecto donde tiene que implementar el artefacto en muchos entornos. –
HSQLDB 2.1 y posterior tiene un modo de compatibilidad PostgreSQL y admite el tipo de datos TEXTO en este modo.
De acuerdo con @fredt. El tipo de datos TEXT no es un tipo de SQL estándar, sino una extensión que admite algunos motores.
Para habilitar Modo de compatibilidad PostgreSQL use sql.syntax_pgs=true
en sus parámetros de conexión.
Para que H2 funcione en modo de compatibilidad con PostgreSQL (útil para pruebas junit).
# JDBC Driver
jdbc.driverClassName=org.h2.Driver
jdbc.url=jdbc:h2:mem:play;MODE=PostgreSQL;TRACE_LEVEL_SYSTEM_OUT=2;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE;INIT=CREATE TABLE IF NOT EXISTS PG_CLASS (RELNAME text, RELKIND text);
jdbc.username=sa
jdbc.password=
# general hibernate options
hibernate.database=h2
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
La tabla de creación PG_CLASS es necesaria para permitir que Hibernate/JPA funcione correctamente. Pero aparte de eso, bastante perfecto.
- 1. .NET Framework Problemas de incompatibilidad
- 2. Problema de asignación con Hibernate
- 3. Problema de cadenas largas persistentes con Hibernate
- 4. NamedQueries problema con Hibernate
- 5. Uso de Flot con Bootstrap: ¿incompatibilidad IE8?
- 6. MCR e incompatibilidad .NET
- 7. Problema de la biblioteca de GlassFishV3 Hibernate
- 8. Hibernate nombre de la columna emite
- 9. incompatibilidad PHP MySQL
- 10. Hibernate/MySQL Problema de inserción masiva
- 11. Problema de espacio PermGen con Glassfish/Hibernate
- 12. moonlight vs. silverlight :: incompatibilidad de datagrid?
- 13. ¿Cómo se selecciona una columna usando Hibernate?
- 14. Selenium WebDriver + incompatibilidad de Firefox 7.0.1
- 15. problema de incompatibilidad Perl con cada uno en un hash de hashes - 5.14 → 5.8.8
- 16. phpExcel problema de tamaño de columna
- 17. Incompatibilidad con el marco de registro
- 18. Columna múltiple Unir en Hibernate/JPA Anotaciones
- 19. Hibernate OneToOne obtención automática de uniones (resolviendo n + 1 problema)
- 20. Hibernate 4: persistente columna discriminadora InheritanceType.JOINED valores
- 21. Hibernate consulta nativa - char (3) la columna
- 22. Hibernate, controlador JDBC y problema OSGi
- 23. Consulta de fecha con Hibernate en Timestamp Columna en PostgreSQL
- 24. Hibernate Jpa Anotación: Problema con Id Embedded
- 25. Hibernate JPA create table type = Problema InnoDB
- 26. Scala: incompatibilidad binaria entre versiones
- 27. Hibernate: cómo deshabilitar la asignación de una columna
- 28. Hibernate - NonUniqueDiscoveredSqlAliasException cuando dos tabla tiene mismos nombres de columna
- 29. Hibernate: restricción de columna única que se ignora
- 30. Grails GORM MySQL generar columna TEXT o LONGTEXT
¿Ha intentado usar Postgres para las pruebas también? En caso afirmativo, ¿qué tipo de problemas has conocido? –
Sí, también uso Postgres para las pruebas. No hay problema con eso, solo problema de incompatibilidad hsqldb – Nemanja