Hibernate对视图进行操作时和对普通的表有些不同,下面就是一个Hibernate操作视图的例子:
视图:
SELECT a.SPID, a.SPKey, b.serviceID, b.serviceName, c.serviceItemID, c.itemName
FROM dbo.tbSPInfo a
INNER JOIN dbo.tbService b ON a.SPID = b.SPID LEFT OUTER JOIN
dbo.tbServiceItem c ON b.serviceID = c.serviceID
1.首先根据视图中的字段定义一个bean
2.定义一个bean,用组合方式将ServiceId包含进去
3.映射文件
ok,用HQL进行查询时,就可以这样:
session.createQuery("from ServiceView sv where sv.id.serviceId = '100001'").list();
查询返回的是ServiceView对象或集合,要得到视图中字段的值,只需要调用ServiceView对象的getId()方法即可获得ServiceId对象,通过ServiceId对象的getXXX()方法,就可以访问到视图中的字段了。
视图:
SELECT a.SPID, a.SPKey, b.serviceID, b.serviceName, c.serviceItemID, c.itemName
FROM dbo.tbSPInfo a
INNER JOIN dbo.tbService b ON a.SPID = b.SPID LEFT OUTER JOIN
dbo.tbServiceItem c ON b.serviceID = c.serviceID
1.首先根据视图中的字段定义一个bean
package com.txsec.lc.is.bean;
import java.io.Serializable;
public class ServiceId implements Serializable {
private static final long serialVersionUID = -2298938310945830572L;
private String spId;
private String spKey;
private String serviceId;
private String serviceName;
private String serviceItemId;
private String itemName;
public ServiceId() {
super();
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getServiceItemId() {
return serviceItemId;
}
public void setServiceItemId(String serviceItemId) {
this.serviceItemId = serviceItemId;
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public String getSpId() {
return spId;
}
public void setSpId(String spId) {
this.spId = spId;
}
public String getSpKey() {
return spKey;
}
public void setSpKey(String spKey) {
this.spKey = spKey;
}
}
import java.io.Serializable;
public class ServiceId implements Serializable {
private static final long serialVersionUID = -2298938310945830572L;
private String spId;
private String spKey;
private String serviceId;
private String serviceName;
private String serviceItemId;
private String itemName;
public ServiceId() {
super();
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getServiceId() {
return serviceId;
}
public void setServiceId(String serviceId) {
this.serviceId = serviceId;
}
public String getServiceItemId() {
return serviceItemId;
}
public void setServiceItemId(String serviceItemId) {
this.serviceItemId = serviceItemId;
}
public String getServiceName() {
return serviceName;
}
public void setServiceName(String serviceName) {
this.serviceName = serviceName;
}
public String getSpId() {
return spId;
}
public void setSpId(String spId) {
this.spId = spId;
}
public String getSpKey() {
return spKey;
}
public void setSpKey(String spKey) {
this.spKey = spKey;
}
}
2.定义一个bean,用组合方式将ServiceId包含进去
package com.txsec.lc.is.bean;
import java.io.Serializable;
public class ServiceView implements Serializable {
private static final long serialVersionUID = -2909733442648785569L;
private ServiceId id;
public ServiceView() {
super();
}
public ServiceId getId() {
return id;
}
public void setId(ServiceId id) {
this.id = id;
}
}
import java.io.Serializable;
public class ServiceView implements Serializable {
private static final long serialVersionUID = -2909733442648785569L;
private ServiceId id;
public ServiceView() {
super();
}
public ServiceId getId() {
return id;
}
public void setId(ServiceId id) {
this.id = id;
}
}
3.映射文件
<?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.txsec.lc.is.bean.ServiceView" table="vwSPService">
<composite-id name="id" class="com.txsec.lc.is.bean.ServiceId">
<key-property name="spId" type="string">
<column name="SPID"/>
</key-property>
<key-property name="spKey" type="string">
<column name="SPKey" />
</key-property>
<key-property name="serviceId" type="string">
<column name="serviceID" />
</key-property>
<key-property name="serviceName" type="string">
<column name="serviceName"/>
</key-property>
<key-property name="serviceItemId" type="string">
<column name="serviceItemID"/>
</key-property>
<key-property name="itemName" type="string">
<column name="itemName" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>
<!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.txsec.lc.is.bean.ServiceView" table="vwSPService">
<composite-id name="id" class="com.txsec.lc.is.bean.ServiceId">
<key-property name="spId" type="string">
<column name="SPID"/>
</key-property>
<key-property name="spKey" type="string">
<column name="SPKey" />
</key-property>
<key-property name="serviceId" type="string">
<column name="serviceID" />
</key-property>
<key-property name="serviceName" type="string">
<column name="serviceName"/>
</key-property>
<key-property name="serviceItemId" type="string">
<column name="serviceItemID"/>
</key-property>
<key-property name="itemName" type="string">
<column name="itemName" />
</key-property>
</composite-id>
</class>
</hibernate-mapping>
ok,用HQL进行查询时,就可以这样:
session.createQuery("from ServiceView sv where sv.id.serviceId = '100001'").list();
查询返回的是ServiceView对象或集合,要得到视图中字段的值,只需要调用ServiceView对象的getId()方法即可获得ServiceId对象,通过ServiceId对象的getXXX()方法,就可以访问到视图中的字段了。