我想使用Hibernate从数据库(Oracle)中检索数据。
我想从视图中选择所有列。该视图没有主键,因此我在Hibernate-mapping中使用了复合键。
首先是我的班级:
public class MyBean implements Serializable {
private MyBeanId compId;
private String col1;
private String col2;
// getters and setters
}
MyBeanId类的位置:
public class MyBeanId implements Serializable {
private int id1;
private int id2;
// getters and setters, hashCode and equals
}
Hibernate映射:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.mypackage">
<class name="MyBean" table="MY_TABLE">
<composite-id name="compId" class="MyBeanId ">
<key-property column="COL_ID1" name="id1" type="int"/>
<key-property column="COL_ID2" name="id2" type="int"/>
</composite-id>
<property name="col1" type="string">
<column name="COL1" />
</property>
<property name="col2" type="string">
<column name="COL2" />
</property>
</class>
</hibernate-mapping>
我的DAO(MyBeanManagerImpl):
public List<MyBean> getMyBeans(Session session) {
try {
Criteria criteria = session.createCriteria(MyBean.class);
List<MyBean> list = criteria.list();
System.out.println(list.toString());
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
我的桌子MY_TABLE:
ID1,ID2,COL1,COL2
1,2,"a","b"
3,2,"c","d"
结果是一个空列表。我已经在表格中验证了数据。当我在我的服务中使用其他经理时,获得结果没有问题,因此会话没有问题。
根本没有抛出异常,所以很奇怪它没有得到任何结果。
答案 0 :(得分:5)
在你的hibernate-configuration中添加新映射的mapping-resource条目 - &gt;会话工厂配置与其他已映射的类一样。
请参阅链接https://access.redhat.com/site/documentation/en-US/JBoss_Enterprise_Web_Platform/5/html/Hibernate_Core_Reference_Guide/tutorial.html#tutorial-firstapp-configuration章节'Hibernate配置',您有hibernate.cfg.xml的示例。您需要添加&lt; mapping-resouce ...条目