我在使用Hibernate和PostgreSQL进行生产以及使用HSQLDB进行测试时遇到问题
我使用自上而下的方法让Hibernate创建数据库模式
我也在使用注释; hibernate.cfg.xml的映射部分只包含像
这样的行
<mapping class="package.subpackage.ClassName" />
Hibernate将字符串变量默认为PostgreSQL上的字符变化(255),这在某些情况下对我来说还不够,所以我必须手动重新定义一些列。
@Column(columnDefinition = "TEXT")
。
但是,TEXT类型对于HSQLDB无效,因此无法创建这些表。
任何人都可以帮忙解决这个问题吗?
答案 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)
是的,你有一个非常大的问题。
请勿使用一个数据库引擎进行测试,也不要使用其他产品。
你可以找到你从未梦想过的问题。