Hinbernate中使用Filter过滤一对多中的选项

    技术2024-06-19  65

    实体类

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

    }

    }

    最新回复(0)