Hibernate postgresql / hsqldb TEXT列不兼容问题

时间:2010-11-18 10:27:30

标签: hibernate postgresql hsqldb

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

任何人都可以帮忙解决这个问题吗?

6 个答案:

答案 0 :(得分:10)

处理这个特定问题的最简单方法可能是根本不使用columnDefinition,而是使用(例如)

显式指定列长度
@Column(length=10000)

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

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:6)

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

答案 3 :(得分:3)

使用PostgreSQL使H2在兼容模式下工作(对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正常运行所必需的。但除此之外 - 非常无缝。

答案 4 :(得分:0)

是的,请尝试使HSQLDB在PostgreSQL兼容模式下运行。

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

答案 5 :(得分:-6)

是的,你有一个非常大的问题。

请勿使用一个数据库引擎进行测试,也不要使用其他产品。

你可以找到你从未梦想过的问题。