Mal hibernate dialecte pour MSSQL 2014
J'ai un problème avec l'insertion d'entités, qui utilisent des séquences, à un MSSQL 2014 de la base de données. J'utilise hibernate qui est livré avec Wildfly 10 CR4 (mais en CR1 et CR2 j'ai eu le même problème).
Ici est une information générale sur la webapp exécuter environnement:
- Wildfly 10 (CR4)
- Java 8 u 51
- Windows 7 Proffesional 64bit
- MSSQL Server 2014
- MSSQL pilote: sqljdbc42.jar est déployé sur le serveur d'application
Mon persistence.xml fichier ressemble à ceci:
<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>
Maintenant, voici ce qui arrive lorsque je rencontre une erreur.
Tout d'abord, lors de Wildfly est commencé, je peux voir cet avertissement:
WARN [org.mise en veille prolongée.moteur.jdbc.le dialecte.interne.StandardDialectResolver] (ServerService Pool de Threads -- 68) HHH000385: Inconnu Microsoft SQL Server version majeure [12] à l'aide de SQL Server 2000 dialecte
J'ai regardé à travers le web et découvert que ce problème est déjà connu depuis le mois de janvier 2015, mais il est malheureusement encore une question ouverte.
L'erreur elle-même est déclenché lorsque j'essaie de conserver une nouvelle entité qui a l'ID configuré pour utiliser des séquences:
@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;
L'exception soulevée est la suivante:
com.microsoft.sqlserver.jdbc.SQLServerException: nom d'objet non Valide "SEQ_MAP_BOOKMARKS".
Ce n'est pas une surprise puisque hibernate est l'utilisation de la mauvaise dialecte - celui qui ne sait rien à propos de séquences.
Quand je modifie persistence.xml et ajouter cette ligne:
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2012Dialect"/>
tout fonctionne comme un charme.
Le problème est que l'application fonctionne également avec la base de données Oracle sur un autre serveur et sur Postgres sur l'autre. J'aimerais éviter d'avoir à préparer plusieurs versions de la même application.
Quelqu'un connais une solution à ce problème ? Ou dois-je attendre pour un autre Wildfly et/ou mise en veille prolongée version apparaissent ?
OriginalL'auteur Marcin Roguski | 2015-11-04
Vous devez vous connecter pour publier un commentaire.
Pendant ce temps, l'équipe n'a pas à résoudre ce problème, vous pouvez créer un dialecte de résolution:
Ensuite, vous configurez votre unité de persistance:
Basée dans cet exemple: http://blog.exxeta.com/2016/03/23/dynamically-resolve-hibernate-database-dialect/
OriginalL'auteur Rodrigo Menezes
Je pense que votre problème pourrait être lié à ce problème connu HHH-9570. (Le lien contient en fait ma demande de pull pour mon projet de contournement)
Fondamentalement, comme c'était le cas avant avec SQL Server 2012, la StandardDialectResolver de Hibernate ne pas reconnaître SQL Server 2014 ([Majeures de la version 12]) et la valeur par défaut dialecte SQLServerDialect est retourné, ce qui est la pour SQL Server 2000
OriginalL'auteur garodriguezlp
Pour Springboot 1.4.7 et inférieur ajouter ci-dessous le fichier de propriétés
OriginalL'auteur Rashad Saif
En fait ce problème est dû à la non appropriée de la cartographie des tables. Vérifier les tables et les mappages de classe d'Entité.
OriginalL'auteur user6788533