Неправильный спящий диалект для MSSQL 2014

У меня проблема со вставкой сущностей, использующих последовательности, в базу данных MSSQL 2014. Я использую Hibernate, который поставляется с Wildfly 10 CR4 (но в CR1 и CR2 я получил ту же проблему).

Вот общая информация о среде выполнения веб-приложений:

Wildfly 10 (CR4)Ява 8 и 51Windows 7 Профессиональная 64bitMSSQL Server 2014Драйвер MSSQL: sqljdbc42.jar развернут на сервере приложений

Мой файл persistence.xml выглядит так:

<persistence-unit name="mb_managed_pu" transaction-type="JTA">
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    <jta-data-source>java:/jdbc/datasource</jta-data-source>
    <properties>
        <property name="hibernate.archive.autodetection" value="class, hbm" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.format_sql" value="true" />
        <property name="hibernate.jdbc.batch_size" value="0" />
        <property name="hibernate.default_schema_" value="openmap"/>
        <property name="hibernate.connection.useUnicode" value="yes"/>
        <property name="hibernate.connection.characterEncoding" value="UTF-8"/>
    </properties>
</persistence-unit>

Теперь вот что происходит, когда я сталкиваюсь с ошибкой.

Во-первых, когда Wildfly запущена, я вижу это предупреждение:

WARN [org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver] (Пул потоков ServerService - 68) HHH000385: Неизвестная основная версия Microsoft SQL Server [12] с использованием диалекта SQL Server 2000

Я просмотрел сеть и обнаружил, что эта проблема уже известна с января 2015 г.открытый вопрос.

Сама ошибка возникает, когда я пытаюсь сохранить новую сущность с идентификатором, настроенным для использования последовательностей:

@Id
@Column(name = "MAP_BOOKMARK_ID")
@SequenceGenerator(name = "SEQ_MAP_BOOKMARKS", sequenceName = "SEQ_MAP_BOOKMARKS", allocationSize = 1)
@GeneratedValue(generator = "SEQ_MAP_BOOKMARKS", strategy = GenerationType.SEQUENCE)
private long                    id;

Возникло следующее исключение:

com.microsoft.sqlserver.jdbc.SQLServerException: недопустимое имя объекта «SEQ_MAP_BOOKMARKS».

Это не удивительно, поскольку в hibernate используется неправильный диалект - тот, который ничего не знает о последовательностях.

Когда я изменяю persistence.xml и добавляю эту строку:

<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>

все работает как шарм.

Проблема в том, что приложение также будет работать с базой данных Oracle на другом сервере и на Postgres на другом. Я хотел бы избежать подготовки нескольких версий одного и того же приложения.

Кто-нибудь знает решение этой проблемы? Или я должен ждать появления другой версии Wildfly и / или спящего режима?

Ответы на вопрос(4)

Ваш ответ на вопрос