プロジェクトのいくつかのクラスを管理するために hibernate を使用しています。MySQL 5.5 は、基盤となる RDMS です。
したがって、通常の操作では、休止状態の方言として org.hibernate.dialect.MySQL5InnoDBDialect を使用します。
しかし、単体テストではhsql 1.8.0.8を使用しており、テスト用の方言としてorg.hibernate.dialect.HSQLDialectを使用しています。
私のチームの開発者の 1 人が「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]
そのため、テーブルを作成するときに方言が使用されていないようです。
回避策はありますか?