实体类
package com.test.hibernate.entity;
/**
* TblStreet entity.
*
* @author MyEclipse Persistence Tools
*/
public class TblStreet implements java.io.Serializable {
// Fields
private Integer id;
private TblArea tblArea;
private String street;
private Integer display;
// Constructors
/** default constructor */
public TblStreet() {
}
/** full constructor */
public TblStreet(Integer id, TblArea tblArea, String street, Integer display) {
this.id = id;
this.tblArea = tblArea;
this.street = street;
this.display = display;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public TblArea getTblArea() {
return this.tblArea;
}
public void setTblArea(TblArea tblArea) {
this.tblArea = tblArea;
}
public String getStreet() {
return this.street;
}
public void setStreet(String street) {
this.street = street;
}
public Integer getDisplay() {
return this.display;
}
public void setDisplay(Integer display) {
this.display = display;
}
}
package com.test.hibernate.entity;
import java.util.HashSet;
import java.util.Set;
/**
* TblArea entity.
*
* @author MyEclipse Persistence Tools
*/
public class TblArea implements java.io.Serializable {
// Fields
private Integer id;
private String area;
private Set tblStreets = new HashSet(0);
// Constructors
/** default constructor */
public TblArea() {
}
/** minimal constructor */
public TblArea(Integer id, String area) {
this.id = id;
this.area = area;
}
/** full constructor */
public TblArea(Integer id, String area, Set tblStreets) {
this.id = id;
this.area = area;
this.tblStreets = tblStreets;
}
// Property accessors
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getArea() {
return this.area;
}
public void setArea(String area) {
this.area = area;
}
public Set getTblStreets() {
return this.tblStreets;
}
public void setTblStreets(Set tblStreets) {
this.tblStreets = tblStreets;
}
}
两个关联类的映射文件
<?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.test.hibernate.entity.TblStreet" table="Tbl_Street" schema="dbo" catalog="mx_lee">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="assigned" />
</id>
<many-to-one name="tblArea" class="com.test.hibernate.entity.TblArea" fetch="select">
<column name="AreaId" not-null="true" />
</many-to-one>
<property name="street" type="java.lang.String">
<column name="street" length="50" not-null="true" />
</property>
<property name="display" type="java.lang.Integer">
<column name="display" not-null="true" />
</property>
</class>
</hibernate-mapping>
<?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.test.hibernate.entity.TblArea" table="Tbl_Area" schema="dbo" catalog="mx_lee">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="assigned" />
</id>
<property name="area" type="java.lang.String">
<column name="Area" length="50" not-null="true" />
</property>
<set name="tblStreets" inverse="true">
<key>
<column name="AreaId" not-null="true" />
</key>
<one-to-many class="com.test.hibernate.entity.TblStreet"/>
<!-- 为一对多访问设置过滤器,首先指定过滤器名字,然后指定过滤器变量displayCondition与TblStreet内的display属性匹配 -->
<filter name="test" condition="display= :displayCondition"></filter>
</set>
</class>
<!-- 设置名字为test的过滤器,并为过滤器添加Integer类型的属性displayCondition -->
<filter-def name="test">
<filter-param name="displayCondition" type="java.lang.Integer"/>
</filter-def>
</hibernate-mapping>
测试类:
package com.test.hibernate.dao;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import com.test.hibernate.entity.TblArea;
import com.test.hibernate.entity.TblStreet;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.test.hibernate.HibernateSessionFactory;
public class TestFilter {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String sql = "from TblArea";
Session session = HibernateSessionFactory.getSession();
//根据XML内设置的过滤器,通过enableFilter()方法加载,并为属性displayCondition赋值;
//这项当查询进行时Filter就会将赋值带入与XML内指定的对应属性进行对皮,并且起到过滤作用
session.enableFilter("test").setParameter("displayCondition", new Integer(1));
Transaction tx = session.beginTransaction();
tx.begin();
try{
Query query = session.createQuery(sql);
List<TblArea> list = query.list();
for(int i=0;i<list.size();i++){
TblArea ta = list.get(i);
Set set = ta.getTblStreets();
Iterator streetIt = set.iterator();
while(streetIt.hasNext()){
TblStreet ts = (TblStreet)streetIt.next();
System.out.println(ts.getStreet());
}
}
tx.commit();
}catch(Exception ex){
tx.rollback();
ex.printStackTrace();
}
}
}