繁体   English   中英

Hibernate postgresql / hsqldb TEXT列不兼容问题

[英]Hibernate postgresql/hsqldb TEXT column incompatibility problem

我在使用Hibernate和PostgreSQL进行生产以及使用HSQLDB进行测试时遇到问题。
我正在使用自上而下的方法让Hibernate创建数据库架构。
我也在使用注释; hibernate.cfg.xml的映射部分仅包含以下行
<mapping class="package.subpackage.ClassName" />
Hibernate在PostgreSQL上默认将String变量设置为character changes(255),这在某些情况下对我来说是不够的,因此我必须使用手动重新定义一些列
@Column(columnDefinition = "TEXT")
但是,TEXT类型对于HSQLDB无效,因此无法创建这些表。

谁能帮助解决这个问题?

解决此特定问题的最简单方法可能是根本不使用columnDefinition,而是使用(例如)显式指定列长度

@Column(length=10000)

也可能是您可以使用@Lob(type = LobType.CLOB)映射它

但我不确定HSQLDB是否正确支持该功能。 在Postgres中,它应该为您提供TEXT类型。

同意@fredt。 TEXT数据类型不是标准的SQL类型,而是某些引擎支持的扩展。

要启用PostgreSQL兼容模式 ,请在连接参数中使用sql.syntax_pgs=true

HSQLDB 2.1和更高版本具有PostgreSQL兼容模式,并且在此模式下支持TEXT数据类型。

使H2与PostgreSQL在兼容模式下工作(可用于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

需要创建表PG_CLASS才能使Hibernate / JPA正常运行。 但除此之外-非常无缝。

是的,只需尝试使HSQLDB在PostgreSQL兼容模式下运行即可。

jdbc.url=jdbc:h2:mem:mydb;sql.syntax_pgs=true

是的,您有很大的问题。

不要使用一个数据库引擎进行测试,而要使用另一个数据库进行生产。

您可以遇到从未想过的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM