數據過濾器註解@Filter 如何在hibernate、spring data jpa中調用

實體定義,Shops.java:
java

package youway.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Filter;
import org.hibernate.annotations.FilterDef;
import org.hibernate.annotations.Filters;
import org.hibernate.annotations.ParamDef;

@Entity
@Table(name = "shops")
@FilterDef(name = "employeeFilter", parameters = { @ParamDef(name = "emplNumber", type = "integer") })
@Filters({ @Filter(name = "employeeFilter", condition = ":emplNumber <= employees_number") })
public class Shop {

	@Id
	@GeneratedValue
	private Integer id;

	/** 店鋪名稱 */
	private String name;

	/** 員工編號 */
	@Column(name = "employees_number")
	private Integer emplNumber;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getEmplNumber() {
		return emplNumber;
	}

	public void setEmplNumber(Integer emplNumber) {
		this.emplNumber = emplNumber;
	}
}

其中,spring

@FilterDef(name = "employeeFilter", parameters = { @ParamDef(name = "emplNumber", type = "integer") })
@Filters({ @Filter(name = "employeeFilter", condition = ":emplNumber <= employees_number") })

是要過濾 employees_number (數據庫字段名)大於等於指定參數 emplNumber (自定義參數名)的記錄數據庫


在Hibernate中調用代碼片斷:session

    public List<Shop>  findAll(){
                Session session = HibernateUtil.getSessionFactory().openSession();
		System.out.println("--過濾生效--");
		Filter filter = session.enableFilter("employeeFilter");
		filter.setParameter("emplNumber", new Integer(24));
		session.beginTransaction();
		List<Shop> results = session.createQuery("from Shop").list();
		for(Shop: results){
			System.out.println("店鋪名稱:"+s.getName()+", 員工編號:"+s.getEmplNumber());
		}
		session.disableFilter("employeeFilter");
		session.close();
		return results;
    }


利用 spring data jpa定義ShopRepository.java:
this

package youway.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import youway.model.Shop;

public interface ShopRepository extends JpaRepository<Shop, Integer> {

}


利用 spring data jpa調用:spa

package youway.service;

import java.util.List;

import javax.annotation.Resource;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.hibernate.Filter;
import org.hibernate.Session;
import org.springframework.stereotype.Service;

@Service
public class ShopService{
	@PersistenceContext 
        private EntityManager entityManager;
	
	@Resource
	private ShopRepository shopRepository;

	@Transactional
	public List<Shop> findAll() {
		Filter filter = (Filter)entityManager.unwrap(Session.class).enableFilter("employeeFilter");
               filter.setParameter("emplNumber", new Integer(1000));
               List<Shop> lists = shopRepository.findAll();
               entityManager.unwrap(Session.class).disableFilter("employeeFilter");
	       return lists;
	}
}
相關文章
相關標籤/搜索