hibernate 视图映射
来源:互联网 发布:手机移动网络自动打开 编辑:程序博客网 时间:2024/06/08 10:28
Hibernate操作视图
首先我们要知道,对于视图其实就是存储了一条sql语句,对多个表进行关联查询后得到一个视图,对于关联较多的表可以很方便,hibernate可以使用两种操作方法
一,在数据库中建立视图,然后可以把视图当做普通的表一样进行映射操作
需要注意的是,可以使用rownum 来做视图的主键,主要就不需要使用主键类来设置
CREATE OR REPLACE VIEW V_SHGW_SAFESTOCK AS
SELECT rownum id,pro.productid,pro.productname 。。。。FROM 。。。。
映射文件
<hibernate-mapping>
<class name="com.dg11185.shgw.pojo.warehouse.VShgwSafestock" table="V_SHGW_SAFESTOCK" schema="SHGW">
<id name="id" type="java.lang.Long">
<column name="ID" precision="0" />
<generator class="native" />
</id>
<property name="productid" type="java.lang.Long">
<column name="PRODUCTID" precision="10" scale="0" />
</property>
<property name="productname" type="java.lang.String">
<column name="PRODUCTNAME" />
</property>
....
</class>
</hibernate-mapping>
二,在数据库中建立视图,然后可以把视图当做普通的表一样进行映射操作
/**
* 销售单据视图的ID类
*
* @author 黄文韬
* @since 1.0
* @Copyright 2013 东莞市邮政局All rights reserved.
*/
public class ExchangegoodsViewId implements Serializable{
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
//视图类
public class ExchangegoodsView implements java.io.Serializable {
private ExchangegoodsViewId exchangeViewId;
private Long orderid;
private String username;
private String telephone;
private String invoicenum;
private Double spreadprice;
//字段和setter/getter方法省略
}
一,
<?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">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="com.dg11185.shgw.pojo.sales.ExchangegoodsView" table="EXCHANGEGOODS_VIEW" schema="SHGW">
<!-- 由于视图没有主键,需要挑选出一个不为空的唯一标志字段,为视图主键,这里选用主表的主键作为视图的逐渐字段 -->
<composite-id class="com.dg11185.shgw.pojo.sales.ExchangegoodsViewId" name="exchangeViewId"> //name是视图Id类在视图类中的属性名字
<key-property name="id" type="java.lang.Long">//name是视图Id类中id的属性名字
<column name="EXCHANGEID" precision="10" scale="0" />
</key-property>
</composite-id>
<property name="orderid" type="java.lang.Long">
<column name="ORDERID" precision="15" scale="0" />
</property>
<property name="username" type="java.lang.String">
<column name="USERNAME" length="20" />
</property>
<property name="telephone" type="java.lang.String">
<column name="TELEPHONE" length="20" />
</property>
<property name="invoicenum" type="java.lang.String">
<column name="INVOICENUM" length="20" />
</property>
。。、、、属性省略
</property>
</class>
</hibernate-mapping>
实体类就是普通的实体类!
注意:在视图中,oracle要求自定义的列名要大写
create or replace view productview as
select pdt.productid,pdt.name as "PRODUCTNAME",pdt.amount,pdt.price,pdt.year,pdt.avggrade, cls.classid,cls.parentid, cls.name as "CLASSNAME", img.url,pdt.storeid,st.name as "STORENAME"
from tb_zhjy_product pdt left join Tb_Zhjy_Product_Class pcs on pcs.productid = pdt.productid
join tb_zhjy_class cls on pcs.classid = cls.classid
left join tb_zhjy_images img on pdt.productid = img.relatedid
left join tb_zhjy_store st on st.storeid = pdt.storeid
where img.sequence=1 and img.usage=0 and
pdt.status = 1 and pdt.banstatus = 0
三,Hibernate操作视图,此视图是把sql语句放在hibernate的配置文件中:
1, 首先确定一下通过视图要得到的字段信息,建立一个普通的bean类
package com.hwt.view;
public class EmpDep implements java.io.Serializable {
private String asid;
private String called;
private String declaration;
...
(生成setter getter方法)
}
2,建立一个配置文件 对应着上面的类名:EmpDep.hbm.xml
<?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">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<!— name里面对应着一个普通的bean类,entity-name是视图的名字 -->
<class name="com.hwt.view.EmpDep " entity-name="EmpDep">
<!-- 建立视图的sql语句 -->
<subselect>
<!--此处写sql语句-->
Select empId,empName,depName from emp,dep where emp.depId = dep.depId;
</subselect>
<!--注意顺序,这里是说下面的表数据变后查询视图的数据也变 -->
<synchronize table="TB_Emp "/>
<synchronize table="TB_Dep"/>
<!-- 对应上面sql查出来的属性 -->
<composite-id>
<key-property name="empId" column="EMPID" type="string" />
</composite-id>
<property name="empName" column="EMPNAME" type="string" />
<property name="depId" column="DEPID" type="string" />
</class>
</hibernate-mapping>
- hibernate 映射视图
- hibernate视图映射
- hibernate视图映射
- hibernate 视图映射
- hibernate 视图映射
- Hibernate:视图映射
- hibernate中视图的映射
- Hibernate View视图映射问题
- Hibernate对视图的映射
- hibernate中将视图进行映射
- Hibernate 映射视图的联合主键
- hibernate映射视图的两种方式
- 关于hibernate映射视图若干问题小结
- hibernate映射视图的一点心得,奇妙!
- hibernate 映射视图及相应问题
- 关于Hibernate 里面的视图映射
- Hibernate 映射视图的联合主键的问题
- 关于Hibernate映射视图后数据查询的方法
- 青帮大亨-傅湘源
- 关于使用FusionCharts生成图表时出现invalid xml data错误提示的解决方法
- 企业级Linux讲座之在SAN上建立高可靠性SAMBA集群
- 开发流程
- Java SE 6 新特性: 对脚本语言的支持
- hibernate 视图映射
- C#练习Array.Sort函数列出所有的进程与模块
- 黑龙江集贤县办公楼坍塌已造成6人死亡-黑龙江-办公楼-坍塌
- 只同0交换的排序
- c++中调用c标准库函数close出错
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
- 我在江北学安全(五) 渗透测试资源总览 和 XSS扫描系统原理 (续)
- S5PV210 多媒体预留内存空间 2 - FIMD和G2D控制器
- Ogre中材质过滤技术