Java 冬眠方言
我正在使用Hibernate从SQLServer2008访问数据Java 冬眠方言,java,hibernate,Java,Hibernate,我正在使用Hibernate从SQLServer2008访问数据 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 " + " G
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.dialogue=org.hibernate.dialogue.sqlserverdialogue
在hibernate.cfg.xml中提供以下内容:
<hibernate-configuration>
<session-factory name="session-factory">
.....
<property name="hibernate.dialect">org.hibernate.dialect.SQLServerDialect</property>
....
</session-factory>
</hibernate-configuration>
我不知道你用的是哪种方式,所以我都知道
我为您的问题找到了两种解决方案:
Session session = sessionFactory.openSession();
String qry="select Form_Id,SUBSTRING(
(SELECT ( '' + t2.Form_Layout_Txt) as formLayoutTxt 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).addScalar("formLayoutTxt", StringType.INSTANCE);
recordList = query.list();
sess.createSQLQuery(“从猫中选择*);
//尝试更改为:
sess.createSQLQuery(“从猫中选择*)
.addScalar(“ID”,Hibernate.LONG)
.addScalar(“名称”,Hibernate.STRING)
.addScalar(“生日”,Hibernate.DATE)此问题与返回数据时进行的类型映射有关。方言中不存在该特定数据类型的映射 休眠数据类型-
该错误意味着hibernate不知道如何将JDBC类型“NVARCHAR”映射到hibernate类型 解决方案1: 像这样使用addScalar:
Session session = sessionFactory.openSession();
String qry="select Form_Id,SUBSTRING(
(SELECT ( '' + t2.Form_Layout_Txt) as formLayoutTxt 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).addScalar("formLayoutTxt", StringType.INSTANCE);
recordList = query.list();
解决方案2:用方言注册Hibernate类型
public class MySQLServerDialect extends SQLServerDialect {
public MySQLServerDialect() {
super();
// Register mappings
registerHibernateType(Types.NVARCHAR, StringType.INSTANCE.getName());
}
}
有关更多详细信息,请查看。实际上我使用了as hibernate.dialent=org.hibernate.dialent.sqlserver2008dialent。是否正确?我已发布了配置。我可以在您的配置中看到正确的方言。你还在犯错误吗?我相信这个答案是正确的。我使用相同的配置。你能发布完整的异常stacktrace吗?不,它不是空指针异常