我有一個將使用序列的實體插入MSSQL 2014數據庫的問題。我使用Wildfly 10 CR4附帶的休眠(但在CR1和CR2中,我遇到了同樣的問題)。MSSQL 2014錯誤的休眠方言
這裏是關於Web應用程序運行環境的一般信息:
- Wildfly 10(CR4)
- 的Java 8ü51
- Windows 7的業餘體校64
- MSSQL服務器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開始時,我可以看到這樣的警告:
警告[org.hibernate.engine.jdbc.dialect.internal.StandardDialectResolver(Server服務線程池 - 68)HHH000385:未知微軟SQL Server主要版本[12]使用SQL Server 2000方言
我查看了網絡,發現這個問題自2015年1月以來就已知曉,但不幸的是它仍然是an open issue。
當我嘗試堅持具有ID配置爲使用序列的新的實體本身的上升的錯誤:
@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和/或休眠版本出現?
值「」 org.hibernate.dialect.SQLServer2012Dialect「」提取到一個屬性文件。將此文件放在tomcat的conf文件夾中。使用彈簧佔位符來設置方言。通過這種配置,您可以將戰爭部署到兩臺不同的服務器上,並且只需要更改tomcat中的屬性文件。 –