[英]hsql hibernate dialect for mysql
我使用休眠來管理項目中的某些類。 MySQL 5.5是底層的RDMS。
因此,對於常規操作,我使用org.hibernate.dialect.MySQL5InnoDBDialect作為休眠方言。
但是對於單元測試,我使用的是hsql 1.8.0.8,並且我使用org.hibernate.dialect.HSQLDialect作為測試的方言。
直到我們團隊中的一位開發人員將“ varchar”列更改為“ mediumtext”時,這才成為問題。
現在,我不能使用下面的HSQLDialect或MySQL5InnoDBDialect進行單元測試。
我嘗試編寫自己的從HSQLDialect擴展過來的方言,並將類型注冊為
registerColumnType( Types.VARCHAR, 16777215, "mediumtext" );
在構造函數中,但這似乎不起作用。
我寫的自定義方言如下
import org.hibernate.dialect.HSQLDialect;
public class HSqlMySqlDialect extends HSQLDialect{
public HSqlMySqlDialect() {
super();
registerColumnType( Types.VARCHAR, "mediumtext" );
}
}
我的測試hibernate.cfg.xml如下所示
<property name="dialect">com.alcatel.util.hibernate.HSqlMySqlDialect</property>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="connection.url">jdbc:hsqldb:mem:testDB</property>
我在啟動ibernate sessionfactory時遇到的錯誤如下
ERROR [SchemaExport] Wrong data type: MEDIUMTEXT in statement [create table TABLE_NAME (ID bigint not null, VALUE mediumtext]
因此,看起來在創建表時未使用方言。
有辦法嗎?
我認為最好的解決方案是不要設置“ dialect”屬性,而讓Hibernate在運行時自動檢測正確的方言。
您可以使用HSQLDB 2.x並為MEDIUMTEXT定義類型。 例如:
創建類型為VARCHAR的MEDIUMTEXT(100000)
HSQLDB 2.x具有MySQL語法兼容模式,該模式當前支持TEXT和CTEXT類型定義。 下一版本可能支持MEDIUMTEXT。
對於版本1.8和2.x,只有一個Hibernate方言。 您應該能夠在方言子類中將MEDIUMTEXT類型定義為LONGVARCHAR。
registerColumnType(Types.LONGVARCHAR,“ longvarchar”);
當您注冊如下的varchartype時
registerColumnType( Types.VARCHAR, 16777215 , "mediumtext" );
您實際上是說所有大小小於等於16777215的varchars都將被注冊為中文本,而不是相反。 因此,更改列注釋的想法是錯誤的。 而且,不應將特定於DB的內容休眠。
所以對我來說,解決方案是在休眠注釋中使用varchar()本身,但通過自定義方言將它們轉換為我需要的任何類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.