hibernate操作视图

本文介绍如何在数据库中创建视图并利用Hibernate进行映射,同时提供了通过视图进行查询的具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 库中生成视图

要完成这样的查询需要较长较复杂的SQL代码,与其在程序中书写代码不如在数据库建立一个视图来简化程序的操作,其SQL代码如下:
create view employeedetialinfo AS (select e.emp_id,e.emp_name,e.emp_sex,e.emp_age,d.dept_name,
b.business_name,e.emp_address from employeeinfo e,depts d,business b where e.emp_dept=d.dept_id and e.emp_business=b.business_id;

以上的SQL语句创建了一个名为employeedetialinfo的视图。

2 映射视图

现在需要用Hibernate对视图进行映射,生成可持久化类对象。注意:在Hibernate3之后才支持对视图的操作,Hibernate2并不支持如果你的项目中是使用Hibernate2就没必要往下看了。
在Eclipse中切到MyEclipse DataBase Explorer(数据库浏览视图)中打开连接,找到Employee表,选择下面的View子节点,可以看到一个名为employeedetialinfo的视图,鼠标右键点击它,选择“Hibernate Reverse Engineering…”,设置了包路径后,依次钩选“Hibernate Mapping File”、“Java Data Object”(取消钩选“Create abstract class”)以及“Java Data Access Object(DAO)”,在“Java Data Access Object(DAO)”下会自动钩选“Generate precise findby methods”,以及选择“Spring DAO”选项,使用“Spring DAO”后,在DAO类里转而使用了HibernateTemplate对象来操作数据库,可以免去事务管理;这样就生成完持久化类,需要注意的是生成视图映射和生成表映射不一样,因为视图是没有主键的,Hibernate就将视图结构本身做为ID主键,所以你可看到生成出来的文件有四个,分别是
Employeedetialinfo.hbm.xml(映射文件)
Employeedetialinfo.java(持久化类文件)
EmployeedetialinfoId.java(视图的数据结构类)
EmployeedetialinfoDAO.java(DAO:Data Access Object用来简化数据操作的类,常用的添加、删除、更新、查询都可以在这个类里得到快速的实现)
如果对表进行映射是没有EmployeedetialinfoId这个类文件的。

3 查询处理

package lin;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

public class Test {

public static void main(String args[])
{
String custcode="030000448024";
PayView vbi = null;
Session session = HibernateSessionFactory.getSession();
Query query = session.createQuery("from PayView t where t.id.custcode='"+custcode+"'");
List a = query.list();
for(int i=0; i<a.size();i++){
vbi = (PayView)a.get(i);
System.out.println(vbi.getId().getSn());

}
}
}

注意:

1 当查询语句中有order by. group by等不能应用rowid字段为主键.

2 如果在设置参数的时候直接传empId这个属性将会报错,提示找不到这个属性,而是需要在empId前面加上父类名Id,即"id.empId",这个ID是何许人也?它的定义就在Employeedetialinfo.hbm.xml映射文件里,<composite-id name="id" class="com.terry.hibernate.modal.EmployeedetialinfoId">。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值