Dialeto de hibernação incorreto para MSSQL 2014
Estou com um problema ao inserir entidades, que usam sequências, em um banco de dados MSSQL 2014. Eu uso o hibernate que é fornecido com o Wildfly 10 CR4 (mas no CR1 e CR2 eu tenho o mesmo problema).
Aqui estão algumas informações gerais sobre o ambiente de execução do webapp:
Wildfly 10 (CR4)Java 8 e 51Windows 7 Professional 64bitMSSQL Server 2014Driver MSSQL: sqljdbc42.jar é implementado no servidor de aplicativosMeu arquivo persistence.xml fica assim:
<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>
Agora, aqui está o que acontece quando encontro um erro.
Primeiro, quando o Wildfly é iniciado, vejo este aviso:
WARN [org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver] (Pool de threads do ServerService - 68) HHH000385: Versão principal desconhecida do Microsoft SQL Server [12] usando o dialeto do SQL Server 2000
Examinei a web e descobri que esse problema já é conhecido desde janeiro de 2015, mas infelizmente ainda éuma questão em aberto.
O erro em si é gerado quando tento persistir em uma nova entidade que tenha o ID configurado para usar sequências:
@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;
A exceção levantada é a seguinte:
com.microsoft.sqlserver.jdbc.SQLServerException: nome de objeto inválido „SEQ_MAP_BOOKMARKS”.
Isso não é uma surpresa, pois o hibernate está usando o dialeto errado - aquele que não sabe nada sobre seqüências.
Quando modifico persistence.xml e adiciono esta linha:
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>
tudo funciona como um encanto.
O problema é que o aplicativo também funcionará com o banco de dados Oracle em outro servidor e no Postgres em outro. Eu gostaria de evitar a necessidade de preparar várias versões do mesmo aplicativo.
Alguém sabe de uma solução para este problema? Ou devo esperar que outra versão Wildfly e / ou hibernação apareça?