實體定義,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; } }