我正在尝试将Hibernate与SQL Server一起使用。
我想从SQL Server中选择行并将它们转换为Places对象。
我会写我尝试的代码和我得到的例外。
List places = session.createQuery("FROM PLACES").list();
for (Iterator iterator = places.iterator(); iterator.hasNext();){
Place place = (Place) iterator.next();
}
例外:
SEVERE: Incorrect syntax near the keyword 'from'.
此代码生成
select from
并且由于SQL Server需要在select和from this query之间执行某些操作
所以我尝试将代码更改为
List places = session.createSQLQuery("SELECT ID,NAME FROM [PLACES].[dbo].[PLACES]").list();
for (Iterator iterator = places.iterator(); iterator.hasNext();){
Place place = (Place) iterator.next();
}
例外:
Exception in thread "main" java.lang.ClassCastException
由于此查询返回一个Object [],我无法转换它。
如何获取行并将其转换为Places对象
映射
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.places.general.Place" table="PLACES" schema="dbo">
<id name="id" type="int">
<column name="ID"/>
<generator class="identity"/>
</id>
<property name="name" type="string">
<column length="100" name="NAME" not-null="true"/>
</property>
</class>
</hibernate-mapping>
答案 0 :(得分:2)
在HQL语句中,您必须使用Java类名,而不是表名:
List places = session.createQuery("FROM Place").list();
或
List places = session.createQuery("FROM com.places.general.Place").list();
你的第二次尝试返回一个Object数组列表,每个数组的第一个元素是id,第二个是name,它必须分别转换为Integer和String。