java之Hibenate中监听事件的重写和二级cache缓存

Posted sundaysjava

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java之Hibenate中监听事件的重写和二级cache缓存相关的知识,希望对你有一定的参考价值。

管理缓存和统计缓存

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>

<!---设置缓存区实现类--->

<property name=”hibernate.cahce.regin.factory_class”>org.hibernate.cahce.ehcahe.EhCacheRegionFactory</property>

//使用缓存

@Entity

@Table

@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)

//统计缓存

<!---开启二级缓存的统计功能--->

<property name=”hibernate.generate_statistics”>true</property>

<!---设置使用结构化方法来维护缓存项--->

<property anem=”hibernate.cache.user_structured_entries”>true</property>

//查看二级缓存  [统计二级缓存]

              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){}

//当把持久化实体的状态同步到数据库时,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){}

//事务提交之前,触发该方法

public void beforeTransactionCompletion(Transaction tx){}

//事务提交之后触发该方法

public void afterTransactionComplistion(Transaction tx){}

}

//设置全家拦截器

static Configuration cfg = new Configration().configure()

//设置启用全局拦截器

.setInterceptor(new MyInterceptor())

 

自定义监听器

MyNameListener extends DefaultLoadEventLister{}

//1.创建一个SessionFactory对象

              SessionFactory sessionFactory = null;

              //1).创建Configuration对象:对应hibernate的基本配置信息和对象映射信息

              Configuration configuration = new Configuration().configure();

              //2)创建ServiceRegistry对象:hibernate 4.x新加对象

              //hibernate的任何配置和服务都需要在该对象中注册后才能生效。

              ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties());

static{

       //获取该SessionFactory的事件监听注册器

       EventListenerRegister elr = ((SessionFactoryImpl)sf).getServiceRegistry().getService(EventListerRegistry.class);

//使用用于指定的拦截器序列代替系统的save拦截器

elr.setListers(EvetnType.SAVE,mySaveLister.class);

//使用用于指定的拦截器序列代替系统的load拦截器序列

elr.setListeners(EventyType.LOAD,MyLoadLsiter.class);

       }

 

 

 

 

<!------>

 

以上是关于java之Hibenate中监听事件的重写和二级cache缓存的主要内容,如果未能解决你的问题,请参考以下文章

JAVA:事件监听器之WindowAdapter类(针对窗口事件)

VRTK之手柄事件监听以及重写StartUsing方法实现与物体的交互

Java JTable 添加了一个键盘事件,和鼠标点击事件的监听,如何在我键盘事件起作用时,让鼠标事件失效

java中注册事件监听器

java笔记之图形类详解---事件监听器

java自定义事件,线程a如何每一秒钟触发一个事件,然后另一个线程b监听之,并作出反应?