gpt4 book ai didi

java - JDBC 类型 : -9 with Hibernate 4 and SQL Server 2012 没有方言映射

转载 作者:行者123 更新时间:2023-11-30 06:21:40 25 4
gpt4 key购买 nike

<分区>

我使用的是最新的 Hibernate 4.2.7.SP1 以及实体管理器和 validator 等。我使用的是 Microsoft SQL Server 2012。

我尝试使用的代码是:

StringBuffer sb = new StringBuffer();
sb.append("SELECT vr.account_name as account FROM MY_VIEW_RECEIVABLES vr;");
String sql = sb.toString();
System.out.println("MyInvoiceDAO: getInvoices: SQL=" + sql);
SQLQuery q = this.sessionFactory.getCurrentSession().createSQLQuery(sql);
q.addScalar("account");
q.setResultTransformer(Transformers.aliasToBean(InvoiceDTO.class));
List results = q.list();

仅供引用:MY_VIEW_RECEIVABLES 是一个 View ,“account_name”字段是一个 NVARCHAR(120)

我得到的问题是:

org.springframework.orm.hibernate4.HibernateSystemException: No Dialect mapping for JDBC type: -9; nested exception is org.hibernate.MappingException: No Dialect mapping for JDBC type: -9
at org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:185)

随着我的搜索,我明白了,方言无法确定数据类型,所以我必须添加标量映射......但是我只是通过添加来尝试:

q.addScalar("account");

但这没有用。

一些解决方案表明我应该创建一个类,例如:

public class SQLServerNativeDialect extends SQLServerDialect
{
public SQLServerNativeDialect()
{
super();
registerColumnType(Types.VARCHAR, "nvarchar($l)");
registerColumnType(Types.CLOB, "nvarchar(max)");
}

public String getTypeName(int code, int length, int precision, int scale) throws HibernateException
{
if (code != 2005)
{
return super.getTypeName(code, length, precision, scale);
}
else
{
return "ntext";
}
}
}

然后我更改我的 hibernate.properties 文件:

From:  hibernate.dialect=org.hibernate.dialect.SQLServerDialect
To: hibernate.dialect=com.myapp.test.utils.SQLServerNativeDialect

这仍然不起作用。任何帮助我引用 Hibernate.STRING 的帮助,这些常量都不存在。

如有任何帮助,我们将不胜感激。谢谢!

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com