动态数据过滤
定义数据过滤器
<filter-def name="limitItemsByUserRank"> <filter-param name="currentUserRank"" type="long"/> </filter-def>
@org.hibernate.annotations.FilterDef(
name="limitItemsByUserRank",
parameters=@org.hibernate.annotations.ParamDef(
name="currentUserRank",type="int"
))
应用和实现过滤器
<filter name="limitItemsByUserRank" condition=":currentUserRank >= (select u.RANK from USERS u where u.USER_ID = SELLER_ID)"/>
@org.hibernate.annotations.Filter(
name = "limitItemsByUserRank",
condition=":currentUserRank >= " +
"(select u.RANK from USER u" +
" where u.USER_ID = SELLER_ID)"
)
启动过滤器
Filter filter = session.enableFilter("limitItemsByUserRank");
filter.setParameter("currentUserRank", loggedInUser.getRanking());
List<Item> filteredItems = session.createQuery("from Item").list();
List<Item> filteredItems = session.createCriteria(Item.class).list();
通过标识符检索和通过对Item实例的导航访问(aCategory.getItems())都没有进行过滤
过滤集合
<class name="Category" table="CATEGORY"> ... <set name="items"> <key column="CATEGORY_ID"/> <one-to-many class="Item"/> <filter name="limitItemsByUserRank" condition=":currentUserRank >= (select u.RANK from USERS u where u.USER_ID = SELLER_ID)"/> </set> </class>
拦截hibernate事件
创建标记接口