[英]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.