我正在使用最新的Hibernate 4.2.7.SP1以及实体管理器和验证器等。我正在使用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是一个视图,“ account_name”字段是NVARCHAR(120)
我得到的问题是:
org.springframework.orm.hibernate4.HibernateSystemException:否JDBC类型的方言映射:-9;
嵌套的异常是org.hibernate.MappingException:否JDBC类型的方言映射:org.springframework.orm.hibernate4.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:185)-9
在搜索过程中,我明白了,方言无法确定数据类型,因此我必须添加Scalar映射…但是我尝试通过添加以下内容来实现:
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的帮助,这些常量都不存在。
任何帮助,将不胜感激。谢谢!
这并不需要花费太多时间来解决。首先,hibernate.dialect仍然是:
hibernate.dialect=org.hibernate.dialect.SQLServerDialect
和“ .addScalar”起作用了,但是对于Hibernate 4,我不得不使用“ StandardBasicTypes”类,如下所述。
q.addScalar("currency", StandardBasicTypes.STRING);
q.addScalar("amount", StandardBasicTypes.BIG_DECIMAL);
q.addScalar("age", StandardBasicTypes.INTEGER);
这是添加参数的标准:
q.setParameter("age", age);
q.setParameter("customerId", customerId);
最后,我仍然需要这个变压器:
q.setResultTransformer(Transformers.aliasToBean(MyDTO.class));
List<MyDTO> results = q.list();
我希望这可以帮助其他人。
问题内容: 我正在使用MySQL作为数据库的Spring JPA应用程序。我确保已加载所有spring-jpa库,hibernate和mysql-connector- java。 我正在运行mysql 5实例。这是我的application.properties文件的摘录: 执行集成测试时,spring可以正常启动,但无法创建hibernate的SessionFactory,但以下情况除外: 我认
虽然这个标题存在一些问题,但我的查询无法从这些线程中解决。 我在postgres中通过hibernate执行递归(使用with子句)查询,查询结果也包含搜索路径 ex:一行查询结果 Hibernate是否具有除字符串以外的的任何映射类型,类似于或。 下面是查询输出的示例 Hibernate正在抛出异常 原因:org.hibernate.MappingException:没有JDBC类型的方言映射:
问题内容: 尽管此标题存在一些问题,但我的查询并没有从那些线程中解决。 我正在通过postgres中的hibernate执行递归查询(与子句一起使用),查询结果也包含搜索路径 例如:查询结果的一行 hibernate状态是否具有String以外的任何映射类型,类似于或。 下面是查询输出的示例 Hibernate抛出异常 原因:org.hibernate.MappingException:没有JDB
我正在开发一个Spring JPA应用程序,使用MySQL作为数据库。我确保加载了所有spring-jpa库、hibernate和mysql-connector-java。 期待您的回答,谢谢! 顺便说一句,应用程序已经在使用spring Boot了。
我在启动Web服务器时遇到上述错误。我用 enum 映射和 enity 类。类似... 是什么问题,我在配置中遗漏了什么吗?谢谢!!
问题内容: 我正在尝试遵循Hibernate Spatial教程,通过Hibernate将Spring Roo与启用PostGIS的PostgreSQL数据库集成。所有非GIS的东西都可以正常工作,并且我已经从PostGIS模板创建了一个数据库。 问题是,一旦我向其中一个实体添加了Geometry属性,就可以: …构建良好,但是尝试在服务器上运行(并实际上与DB交互)会导致以下错误: Hibern