Hibernate postgresql/hsqldb TEXT 列不兼容问题

发布于 2024-10-03 15:44:42 字数 414 浏览 2 评论 0原文

我在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

莫言歌 2024-10-10 15:44:42

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

@Column(length=10000)

,您也可以将其映射为
@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)

@Column(length=10000)

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.

烟花肆意 2024-10-10 15:44:42

同意@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.

懷念過去 2024-10-10 15:44:42

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

HSQLDB 2.1 and later has a PostgreSQL compatibility mode and supports the TEXT data type in this mode.

梦忆晨望 2024-10-10 15:44:42

让 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 正确运行。但除此之外——非常无缝。

To get H2 to work in compatability mode with PostgreSQL (useful for junit testing).

# 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

The create table PG_CLASS is required to allow Hibernate/JPA to correctly function. But other than that - pretty seamless.

雨的味道风的声音 2024-10-10 15:44:42

是的,尝试一下让 HSQLDB 以 PostgreSQL 兼容模式运行。

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

Yes, just try on blow to make HSQLDB run in PostgreSQL compatibility mode.

jdbc.url=jdbc:h2:mem:mydb;sql.syntax_pgs=true
甜点 2024-10-10 15:44:42

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

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

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文