我正在使用 Hibernate 从 sql server 2008 访问数据。同时执行以下代码
Session session = sessionFactory.openSession();
String qry="select Form_Id,SUBSTRING(
(SELECT ( '' + t2.Form_Layout_Txt) FROM Form_Layout_Info t2
WHERE t1.Form_Id = t2.Form_Id " +
" GROUP BY Form_Layout_Txt FOR XML path('') ), 1,1000000000)
FROM Form_Layout_Info t1 GROUP BY Form_Id";
SQLQuery query = session.createSQLQuery(qry);
recordList = query.list();
我的 Hibernate 属性是
hibernate.connection.driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver
hibernate.connection.url=jdbc:sqlserver://localhost:1433;databaseName=abc;integratedSecurity=false;
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
hibernate.connection.username=sa
hibernate.connection.password=p123asc
我收到以下错误
No Dialect mapping for JDBC type: -9
如何解决问题。
最佳答案
您需要在 sql server 的配置中提供 hibernate.dialect=org.hibernate.dialect.SQLServerDialect
。
要么在 hibernate.cfg.xml 中将其提供为:
<hibernate-configuration>
<session-factory name="session-factory">
.....
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
....
</session-factory>
</hibernate-configuration>
或在属性文件中为:
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
我不知道你用的是哪种方式,所以把我知道的都贴出来
我为您的问题找到了 2 个解决方案 here :
尝试将您的驱动程序更改为 jTDS 使用微软提供的ms sql server jdbc驱动会导致这个问题,而jTDS没有给出这个问题。
您可能需要向您的 hibernate 查询显式“添加标量”。你可能有这样的事情:
sess.createSQLQuery("SELECT * FROM CATS"); //尝试更改为: sess.createSQLQuery("SELECT * FROM CATS") .addScalar("ID", Hibernate.LONG) .addScalar("名称", Hibernate.STRING) .addScalar("出生日期", Hibernate.DATE)
关于java - hibernate 方言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14138120/