实体类
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(); }
}
}