Dialecto de hibernación incorrecto para MSSQL 2014

Tengo un problema con la inserción de entidades, que usan secuencias, en una base de datos MSSQL 2014. Uso hibernate que se envía con Wildfly 10 CR4 (pero en CR1 y CR2 obtuve el mismo problema).

Aquí hay una información general sobre el entorno de ejecución de la aplicación web:

Wildfly 10 (CR4)Java 8 u 51Windows 7 Profesional 64bitServidor MSSQL 2014Controlador MSSQL: sqljdbc42.jar se implementa en el servidor de aplicaciones

Mi archivo persistence.xml tiene este aspecto:

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

Ahora, esto es lo que sucede cuando me encuentro con un error.

Primero, cuando se inicia Wildfly, puedo ver esta advertencia:

WARN [org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver] (Grupo de subprocesos de ServerService - 68) HHH000385: Versión principal desconocida de Microsoft SQL Server [12] usando el dialecto SQL Server 2000

Miré a través de la web y descubrí que este problema ya se conoce desde enero de 2015, pero desafortunadamente todavía esun tema abierto.

El error en sí se genera cuando trato de persistir una nueva entidad que tiene la ID configurada para usar secuencias:

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

La excepción planteada es la siguiente:

com.microsoft.sqlserver.jdbc.SQLServerException: Nombre de objeto no válido "SEQ_MAP_BOOKMARKS".

Esto no es una sorpresa ya que hibernate está usando el dialecto incorrecto, el que no sabe nada sobre secuencias.

Cuando modifico persistence.xml y agrego esta línea:

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

Todo funciona como un encanto.

El problema es que la aplicación también funcionará con la base de datos Oracle en otro servidor y en Postgres en otro. Me gustaría evitar tener que preparar varias versiones de la misma aplicación.

¿Alguien sabe de una solución a este problema? ¿O debería esperar a que aparezca otra versión de Wildfly y / o hibernación?

Respuestas a la pregunta(4)

Su respuesta a la pregunta