2015-05-20 4 views
0

Я пытаюсь запустить приложение на MySQL (для производства) и H2 (для dev/testing). Сценарий My (Flyway) для создания таблиц теперь почти идентичен, за исключением столбца, который должен быть объявлен «LONGTEXT» для MySQL. Если я использую это для H2 (который работает в режиме совместимости с MySQL), я получаю:MySQL LONGTEXT с встроенной базой данных h2

Wrong column type in public.public.customer_license for column license. 
Found: clob, expected: varchar(65535) 

Java-код моего лица:

@Column(name = "license", length = 65535) 
private String m_license; 

Если я изменяю заявление колонки к VARCHAR (65535), то она работает на H2, но не для MySQL:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Column length too big for column 'license' 
(max = 21845); use BLOB or TEXT instead 

Как я могу заставить его работать на обоих?

+0

'тип данных BLOB' также доступен с H2. Вы можете использовать его как в H2, так и в MySQL. Здесь http://www.h2database.com/html/datatypes.html#blob_type –

+0

MySQL, похоже, не нравится. Я получаю 'Неверный тип столбца в flux_licenses.customer_license для разрешения столбца. Найдено: blob, expected: longtext' –

+0

Я поддерживал 3 базы данных в своем проекте, но все три имеют разные классы и разные методы. Я использовал BLOB вместо LONGTEXT –

ответ

1

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

+0

Я использую Spring Boot, у меня нет 'orm.xml'. У вас есть ссылка на дополнительную документацию о том, как делать то, что вы здесь говорите? –

+0

orm.xml является частью стандарта JPA. Вы указываете местоположение через часть файла mapping-persistence.xml. См. Также http://www.datanucleus.org/products/accessplatform_4_1/jpa/metadata_xml.html –

+0

@WimDeblauwe: См. [Это сообщение] (http://stackoverflow.com/questions/8750777/orm-xml-does-not -override-annotations) на SO в качестве примера – olexd

1

У меня была такая же проблема , Я решил это, используя аннотацию @Lob. Это подтверждает, что LONGTEXT в таблице mysql. При использовании в памяти H2 создается поле CLOB.

import javax.persistence.Lob; 

...

@Lob 
private String lotsOfText; 
Смежные вопросы