Wrong Hibernate Dialekt für MSSQL 2014

Ich habe ein Problem beim Einfügen von Entitäten, die Sequenzen verwenden, in eine MSSQL 2014-Datenbank. Ich verwende den mit Wildfly 10 CR4 gelieferten Ruhezustand (aber in CR1 und CR2 habe ich das gleiche Problem).

Hier finden Sie allgemeine Informationen zur Webapp-Umgebung:

Wildfly 10 (CR4)Java 8 u 51Windows 7 Proffesional 64bitMSSQL Server 2014MSSQL-Treiber: sqljdbc42.jar wird auf dem Anwendungsserver bereitgestellt

Meine persistence.xml-Datei sieht folgendermaßen aus:

<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>

Nun passiert Folgendes, wenn ich auf einen Fehler stoße.

Zunächst, wenn Wildfly gestartet wird, kann ich diese Warnung sehen:

WARN [org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver] (ServerService-Thread-Pool - 68) HHH000385: Unbekannte Hauptversion von Microsoft SQL Server [12] mit SQL Server 2000-Dialekt

Ich habe im Internet nachgesehen und festgestellt, dass dieses Problem bereits seit Januar 2015 bekannt ist, aber es ist leider immer noch ein offenes Problem.

Der Fehler selbst wird ausgelöst, wenn ich versuche, eine neue Entität beizubehalten, deren ID für die Verwendung von Sequenzen konfiguriert ist:

@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;

Die Ausnahmebedingung lautet wie folgt:

com.microsoft.sqlserver.jdbc.SQLServerException: Ungültiger Objektname „SEQ_MAP_BOOKMARKS”.

Das ist keine Überraschung, da im Ruhezustand der falsche Dialekt verwendet wird - derjenige, der nichts über Sequenzen weiß.

Wenn ich persistence.xml ändere und diese Zeile hinzufüge:

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

lles funktioniert wie ein Zaube

Das Problem ist, dass die Anwendung auch mit Oracle-Datenbanken auf einem anderen Server und mit Postgres auf einem anderen Server funktioniert. Ich möchte vermeiden, dass Sie mehrere Versionen derselben Anwendung vorbereiten müssen.

Weiß jemand eine Lösung für dieses Problem? Oder sollte ich warten, bis eine andere Wildfly- und / oder Ruhezustandsversion angezeigt wird?

Antworten auf die Frage(8)

Ihre Antwort auf die Frage