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

实体类

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值