Я использую спящий режим для управления некоторыми классами в моем проекте. 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]
Так что похоже диалект не используется при создании таблиц.
Есть ли обходной путь?