java之Hibenate中监听事件的重写和二级cache缓存
管理緩存和統(tǒng)計緩存
Cache cache? = sessionFactory.getCache();
????????????? //清除指定的News對象
????????????? cache.evictEntity(News.class, id);
????????????? //清除所有的news對象
????????????? cache.evictEntityRegion(News.class);
????????????? //清除指定id的news所關聯的參與者集合屬性
????????????? cache.evictColleciton("News.actors",id);
????????????? //清除所有News關聯的參與者集合屬性
????????????? cache.evictCollectionRegion("News.actors");
<!---開啟二級緩存--->
<property name=”hibernate.cache.user_second_level_cache”>true</property>
<!---設置緩存區(qū)實現類--->
<property name=”hibernate.cahce.regin.factory_class”>org.hibernate.cahce.ehcahe.EhCacheRegionFactory</property>
//使用緩存
@Entity
@Table
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
//統(tǒng)計緩存
<!---開啟二級緩存的統(tǒng)計功能--->
<property name=”hibernate.generate_statistics”>true</property>
<!---設置使用結構化方法來維護緩存項--->
<property anem=”hibernate.cache.user_structured_entries”>true</property>
//查看二級緩存? [統(tǒng)計二級緩存]
????????????? Map cacheEntries = sessionFactory.getStatistics()
??????????????????????????? //
??????????????????????????? .getSecondLevelCacheStatistics("org.crazyit.app.domain.News")
??????????????????????????? .getEntries();
使用查詢緩存
//默認是關閉緩存
session.createQuery().setCacheable(false).list();
//開啟查詢緩存
session.createQuery().setCacheable(true).list();
Iterator it = session.createQuery().setCacheable(true).iterate();
攔截器的定義
MyInterCeptor extends EmptyInterceptor
{
//當刪除實體時,onDelete()方法被調用
public void onDelete(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types){}
//當把持久化實體的狀態(tài)同步到數據庫時,onFlushDirty()方法調用
public Boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousSate, String[] propertyNames, Type[] types){}
//當加載持久化實體時,onLoad()方法被調用
public Boolean onload(Object entity,, Serializable id, Object[] state, String[] proipertyNames, Type[] types){}
//保存持久化實例時,調用該方法
public Boolean onSave(Obejct entity, Serializable id, Object[] state, String[] propertyNames, Type[] type){}
//持久化所做修改同步后,調用preFlush()方法
public void postFlush(Iterator entities){}
//在同步持久化所做修改之前,調用preFlush()方法
public void preFlush(Iterater entities){}
//事務提交之前,觸發(fā)該方法
public void beforeTransactionCompletion(Transaction tx){}
//事務提交之后觸發(fā)該方法
public void afterTransactionComplistion(Transaction tx){}
}
//設置全家攔截器
static Configuration cfg = new Configration().configure()
//設置啟用全局攔截器
.setInterceptor(new MyInterceptor())
?
自定義監(jiān)聽器
MyNameListener extends DefaultLoadEventLister{}
//1.創(chuàng)建一個SessionFactory對象
????????????? SessionFactory sessionFactory = null;
????????????? //1).創(chuàng)建Configuration對象:對應hibernate的基本配置信息和對象映射信息
????????????? Configuration configuration = new Configuration().configure();
????????????? //2)創(chuàng)建ServiceRegistry對象:hibernate 4.x新加對象
????????????? //hibernate的任何配置和服務都需要在該對象中注冊后才能生效。
????????????? ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());
static{
?????? //獲取該SessionFactory的事件監(jiān)聽注冊器
?????? EventListenerRegister elr = ((SessionFactoryImpl)sf).getServiceRegistry().getService(EventListerRegistry.class);
//使用用于指定的攔截器序列代替系統(tǒng)的save攔截器
elr.setListers(EvetnType.SAVE,mySaveLister.class);
//使用用于指定的攔截器序列代替系統(tǒng)的load攔截器序列
elr.setListeners(EventyType.LOAD,MyLoadLsiter.class);
?????? }
?
?
?
?
<!------>
?
轉載于:https://www.cnblogs.com/sundaysjava/p/10349555.html
總結
以上是生活随笔為你收集整理的java之Hibenate中监听事件的重写和二级cache缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shadow DOM及自定义标签
- 下一篇: Sx05RE-S905.arm-2.2.