Hibernate postgresql/hsqldb TEXT 列不兼容问题
我在使用 Hibernate 和 PostgreSQL 进行生产以及使用 HSQLDB 进行测试时遇到问题。
我正在使用自上而下的方法让 Hibernate 创建数据库模式。
我也在使用注释; hibernate.cfg.xml 的映射部分仅包含类似
的行
Hibernate 在 PostgreSQL 上默认字符串变量为字符变化(255),这在某些情况下对我来说不够,所以我必须使用
手动重新定义一些列 @Column(columnDefinition = "TEXT")
。
但是,TEXT 类型对于 HSQLDB 无效,因此无法创建这些表。
有人能帮忙解决这个问题吗?
I have a problem using Hibernate and PostgreSQL for production and HSQLDB for testing.
I am using top-down approach letting Hibernate create database schema.
I am also using annotations; mapping part of hibernate.cfg.xml only contains lines like<mapping class="package.subpackage.ClassName" />
Hibernate defaults String variables to character varying(255) on PostgreSQL which is not sufficient for me in some cases, so I have to redefine some columns manually using@Column(columnDefinition = "TEXT")
.
But, TEXT type is invalid for HSQLDB, so those tables can not be created.
Can anyone help to solve this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
处理这个特定问题的最简单方法可能是根本不使用columnDefinition,而是显式指定列长度(例如)
,您也可以将其映射为
@Lob(type = LobType.CLOB)
但我不确定 HSQLDB 是否正确支持它。在 Postgres 中,它应该为您提供 TEXT 类型。
The easiest way to deal with this specific issue is probably to not use the columnDefinition at all and instead to explicitly specify the column length with (for example)
It might also be that you could instead map it with
@Lob(type = LobType.CLOB)
but I'm not sure that is supported properly in HSQLDB. In Postgres it should give you your TEXT type.
同意@fredt。
TEXT数据类型不是标准的SQL类型,而是某些引擎支持的扩展。
要启用 PostgreSQL 兼容模式,请在连接参数中使用
sql.syntax_pgs=true
。Agree with @fredt.
TEXT data type isn't standard SQL type, but extension that some engine supports.
To enable PostgreSQL compatibility mode use
sql.syntax_pgs=true
in your connection parameters.HSQLDB 2.1及更高版本具有PostgreSQL兼容模式,并支持该模式下的TEXT数据类型。
HSQLDB 2.1 and later has a PostgreSQL compatibility mode and supports the TEXT data type in this mode.
让 H2 在与 PostgreSQL 兼容的模式下工作(对于 junit 测试很有用)。
需要创建表 PG_CLASS 才能允许 Hibernate/JPA 正确运行。但除此之外——非常无缝。
To get H2 to work in compatability mode with PostgreSQL (useful for junit testing).
The create table PG_CLASS is required to allow Hibernate/JPA to correctly function. But other than that - pretty seamless.
是的,尝试一下让 HSQLDB 以 PostgreSQL 兼容模式运行。
Yes, just try on blow to make HSQLDB run in PostgreSQL compatibility mode.
是的,你有一个非常大的问题。
不要使用一种数据库引擎进行测试,而另一种数据库引擎进行生产。
您可能会遇到从未想过的问题。
Yes, you have a really big problem.
DON'T USE ONE DATABASE ENGINE FOR TESTING, AND ANOTHER FOR PRODUCTION.
You can hit upon problems you've never dreamed about.