2010-11-18 70 views
9

我在使用Hibernate和PostgreSQL進行生產和HSQLDB測試時遇到了問題。
我使用自頂向下的方法讓Hibernate創建數據庫模式。
我也使用註釋;的hibernate.cfg.xml的映射部僅包含上的PostgreSQL線等
<mapping class="package.subpackage.ClassName" />
休眠默認字符串變量字符改變(255),這是不夠的我在一些情況下,所以我必須重新定義使用
手動某些列@Column(columnDefinition = "TEXT")
但是,TEXT類型對HSQLDB無效,因此無法創建這些表。

任何人都可以幫助解決這個問題嗎?Hibernate postgresql/hsqldb TEXT列不兼容問題

+0

您是否嘗試過使用Postgres進行測試呢?如果是,你遇到了什麼樣的問題? – 2010-11-18 11:49:39

+0

是的,我也使用Postgres進行測試。沒有問題,只有hsqldb不兼容問題 – Nemanja 2010-11-19 10:49:20

回答

10

處理這個具體問題的最簡單的方法可能是在所有不使用columnDefinition,而是明確地與指定列長度(例如)

@Column(length=10000) 

這也可能是你能代替與 @Lob(type = LobType.CLOB)

但我不確定在HSQLDB中正確支持。在Postgres中它應該給你你的TEXT類型。

+0

是啊,thanx,長度是訣竅! – Nemanja 2010-11-18 13:30:21

+1

是的,這是最簡單的解決方案,但我更喜歡使用HSQLDB和Postgres兼容模式。 – 2012-10-25 11:28:08

-5

是的,你有一個真的很大問題。

不要使用一個數據庫引擎進行測試,另一個用於生產。

你可以遇到你從未夢想過的問題。

+0

是的,thanx,我記住了這一點,並組織了測試,以便它們可以輕鬆地在兩個數據庫上運行。但最近我有了這個小小的變化,hsqldb開始出現問題。 – Nemanja 2010-11-19 10:46:58

+19

是和否。同意測試環境**應與生產環境完全相同。但是單元測試是不同的:使用內存數據庫(如Apache Derby或HSQLDB)非常好。更重要的是:有很多優點。 – 2012-10-25 11:09:40

+0

考慮到您必須在許多環境中部署工件的項目類型,此評論可能是使用多個數據庫引擎進行測試和生產的最佳參數。 – 2014-06-25 15:39:13

6

HSQLDB 2.1及更高版本具有PostgreSQL兼容模式,並支持此模式下的TEXT數據類型。

8

同意@fredt。 TEXT數據類型不是標準的SQL類型,而是某些引擎支持的擴展名。

啓用PostgreSQL兼容模式在您的連接參數中使用sql.syntax_pgs=true

2

讓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正常工作。但除此之外 - 非常無縫。