說有一個用戶表結構:如何啓用sessionFactory.getCurrentSession休眠濾波器()?
用戶
- 列表項
- 用戶ID(PK)
- 公司(PK)
- 的userName
- 地址.. .etc
我想只爲當前公司檢索用戶(公司可以通過用戶界面更改公司,所以公司是運行時參數)
類似地,還有許多其他表具有與普通列相似的結構公司),我想限制數據只有當前的公司,所以我使用休眠過濾器來過濾數據。
Hibernate的註解:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">Dialect....</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.generate_statistics">true</prop>
<prop key="hibernate.connection.release_mode">after_transaction</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
</props>
</property>
<property name="annotatedClasses">
<list>
<value>User</value>
.....
</list>
</property>
</bean>
過濾器定義:
@org.hibernate.annotations.FilterDef(name="restrictToCurrentCompany", parameters = {@org.hibernate.annotations.ParamDef( name = "currentCompanyNumber", type = "int" ) } ) @Entity @Table(name = "USER") @org.hibernate.annotations.Filter( name = "restrictToCurrentCompany", condition="company = :currentCompanyNumber" ) public class User implements Serializable { private int company; private String userName; ...etc.. }
道的:
@Repository @Transactional(readOnly = true) public class UserDAOImpl implements UserDAO { @Autowired(required = true) private SessionFactory sessionFactory; public Set getUsers(){ .....Criteria queries to retrieve users for the current company } private Session getSession(){ return sessionFactory.getCurrentSession(); } }
如果我改變,像這樣的getSession;
private Session getSession(){
Session session = sessionFactory.getCurrentSession();
Filter filter = session.enableFilter("restrictToCurrentCompany");
filter.setParameter("currentCompanyNumber", UserUtils.getCurrentCompany());
return sessionFactory.getCurrentSession();
}
那麼我就可以啓用過濾器,一切看起來不錯,但不是讓會議期間啓用過濾器是有一個申請,使整個會話工廠/應用層過濾簡單的替代方案?如果是這樣,我怎麼能使用彈簧配置呢?我試圖掛鉤入休眠攔截器(預加載事件listerns),但我有點不確定這是一種正確的方法,還是應該使用上面列出的getSession方法來啓用過濾器?
你最終什麼了起來做,@sachink?同樣,我想自動設置我的運行時篩選器的值不那麼突兀的方式。 – 2013-02-28 18:58:50