Hibernate postgresql / hsqldb TEXT проблема несовместимости столбцов - PullRequest
11 голосов
/ 18 ноября 2010

У меня проблема с использованием Hibernate и PostgreSQL для производства и HSQLDB для тестирования.Я использую нисходящий подход, позволяющий Hibernate создать схему базы данных.Я также использую аннотации;Часть отображения hibernate.cfg.xml содержит только такие строки, как<mapping class="package.subpackage.ClassName" />Hibernate по умолчанию использует строковые переменные с переменным символом (255) в PostgreSQL, что в некоторых случаях мне недостаточно, поэтому мне приходится переопределять некоторые столбцы вручную, используя@Column(columnDefinition = "TEXT").Но тип TEXT недопустим для HSQLDB, поэтому эти таблицы не могут быть созданы.Кто-нибудь может помочь решить это?

Ответы [ 6 ]

10 голосов
/ 18 ноября 2010

Самый простой способ справиться с этой конкретной проблемой - это, вероятно, вообще не использовать columnDefinition и вместо этого явно указывать длину столбца с помощью (например)

@Column(length=10000)

. Возможно, вывместо этого сопоставьте его с @Lob (type = LobType.CLOB)

, но я не уверен, что он поддерживается должным образом в HSQLDB.В Postgres он должен указать ваш тип TEXT.

8 голосов
/ 25 октября 2012

Согласен с @fredt. Тип данных TEXT - это не стандартный тип SQL, а расширение, поддерживаемое некоторыми механизмами.

Чтобы включить Режим совместимости с PostgreSQL , используйте sql.syntax_pgs=true в параметрах соединения.

6 голосов
/ 15 апреля 2011

HSQLDB 2.1 и более поздних версий имеет режим совместимости с PostgreSQL и поддерживает тип данных TEXT в этом режиме.

3 голосов
/ 04 июля 2013

Чтобы заставить 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

Для правильного функционирования Hibernate / JPA требуется таблица создания PG_CLASS.Но кроме этого - довольно легко.

0 голосов
/ 31 октября 2018

Да, просто попробуйте запустить HSQLDB в режиме совместимости с PostgreSQL.

jdbc.url=jdbc:h2:mem:mydb;sql.syntax_pgs=true
0 голосов
/ 18 ноября 2010

Да, у вас действительно большая проблема.

НЕ ИСПОЛЬЗУЙТЕ ОДИН ДВИГАТЕЛЬ БАЗЫ ДАННЫХ ДЛЯ ИСПЫТАНИЙ И ДРУГОЙ ДЛЯ ПРОИЗВОДСТВА.

Вы можете столкнуться с проблемами, о которых вы никогда не мечтали.

...