hibernate过滤器

Hibernate提供了对类使用预先定义的过滤器条件的功能,并提供了专门的Filter类.
[list]
  • 首先在需要过滤的model类的hbm.xml中:
  • <class name="com.u2map.model.oneToOne.Pwd">
    	<id name="id" column="id" type="integer">
    		<generator class="foreign">
    			<param name="property">member</param>
    		</generator>
    	</id>
    	<property name="pwd" column="pwd" type="string"></property>
    	<one-to-one name="member" constrained="true" class="com.u2map.model.oneToOne.Member"></one-to-one>
        //过滤器配置
    	<filter name="myFilter" condition="pwd like :myFilterParam"/>	
    </class>
    	
    //过滤器配置
    <filter-def name="myFilter">
    	<filter-param name="myFilterParam" type="string"/>
    </filter-def>

    [/list]

    [list]
  • 其次,在testcase中加上过滤:
  • //使用过滤器
    session.enableFilter("myFilter").setParameter("myFilterParam", "%a%");
    Query query = session.createQuery("from Pwd p where p.id = :id");
    query.setParameter("id", 3);
    Pwd member = null;
    try {
    	member = (Pwd) query.uniqueResult();
    } catch (HibernateException e) {
    	e.printStackTrace();
    }
    Assert.assertEquals(member.getId(), 3);
    Assert.assertEquals(member.getPwd(), "abc");
    

    [/list]

    [list]
  • 查看下hibernate生成的sql语句,证明filter已经加上:
  • Hibernate: select pwd0_.id as id1_, pwd0_.pwd as pwd1_ from Pwd pwd0_ where pwd0_.pwd like ? and pwd0_.id=?
    

    [/list]

    你可能感兴趣的:(java,sql,Hibernate,xml)