HQL(六)クエリーフィルタ


クエリーフィルタ
クエリーフィルタが設定されていて、プログラムでフィルタが開かれています。同じセッションでは、すべてのクエリ文の後に所定のクエリ条件が追加されます。
*マップファイルでフィルタのパラメータを定義する
*クラスのマッピングファイルにフィルタパラメータを使う
マッピングファイルstudent.hbm.xml
<ヒベルナ-mapping>
<class name=「comp.wlh.hibernate.Student」table=「ttudent」
<id name=“id”>
<generator class=「native」/>

<property name=「name」/>
<property name=「createTime」/>
<many-to-one name=「classis」column=「classide」/>
                
<!--フィルタを設定する条件は、idが10---です。

        
<query name=「studentQuery」>
      プロジェクト  s from Student s
   ]]>

<!>フィルタを宣言して、モザイクmyidを設定します。タイプはinitegerです。<filter-def name=“filtertest”><filter-param name=“myid”type=“integer”/

*プログラムでフィルタを有効にする
参照:FilterQuery Test.java

package com.wlh.hibernate;

import java.util.Iterator;
import java.util.List;

import junit.framework.TestCase;

import org.hibernate.Session;

public class FilterQueryTest extends TestCase{

	public void testQuery1() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			//          myid   10
			session.enableFilter("filtertest")
			       .setParameter("myid", 10);
			List students=session.getNamedQuery("studentQuery")
						
								 .list();
			for(Iterator iter=students.iterator();iter.hasNext();){
				Student o=(Student)iter.next();
				System.out.println("name="+o.getName());
			}
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}	
}