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);

       }

 

 

 

 

<!------>

 

转载于:https://www.cnblogs.com/sundaysjava/p/10349555.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

axi ps读写pl_PL读写DDR:Datamover能干什么

最近发现工程项目中一直在用AXI-DMA。这玩意儿搬数据倒是没问题&#xff0c;就是用axi-lite配置起来非常反人类。。。简单的办法其实是用datamover ip核。这个ip核能干嘛呢。准备写个文章解析一下。由于好多feature没用过&#xff0c;所以仅仅看文档可能理解有误&#xff0c;欢…

在10分钟内在新Mac中设置Java开发环境(更新)

这只是一个小的更新文章&#xff0c;它引用了2个较旧的条目&#xff08; a &#xff0c; b &#xff09;&#xff0c;我将它们合并为一个步骤&#xff0c;就像一步操作&#xff0c;并确保所有功能都在最新的MacOSX 10.9 Mavericks下工作 。 我主要针对的是初次尝试设置其环境的…

linux path 与 classpath 区别

linux path 与 classpath 区别 一、OS依据path中的路径信息来寻找可执行指令&#xff1b; 例如&#xff1a; cat /etc/profile 我们就可以在任意目录执行hadoop / hdfs / yarn / java 等相关命令了 export HADOOP_HOME/opt/hadoop/hadoop-2.6.0 export JAVA_HOME/home/jdk1.8.0…

开启9008端口进入深刷模式

除了前文所述&#xff0c;使用深刷线&#xff0c;还可以用命令开启9008端口&#xff0c;进入深刷模式。 adb reboot edl fastboot oem edl 这个在小米4c上测试ok 下面这个可能用于其他手机。 fastboot reboot emergency http://www.znsjw.net/nd.jsp?id19 小米绕BL锁9008工程…

Vue Webpack常见问题(持续更新)

常识 1.computed计算属性&#xff0c;使用的属性必需在data里面声明。 computed: {canLogin: function(){//注意这里的依赖的属性必需在data里面声明return this.name && this.password;} } Webpack问题 1.模块里面使用JSON.stringify和 typeof&#xff0c;报&#x…

hashmap为什么用红黑树_要看HashMap源码,先来看看它的设计思想

HashMap 是日常开发中&#xff0c;用的最多的集合类之一&#xff0c;也是面试中经常被问到的 Java 类之一。同时&#xff0c;HashMap 在实现方式上面又有十分典型的范例。不管是从哪一方面来看&#xff0c;学习 HashMap 都可以说是有利无害的。分析 HashMap 的源码的文章在网上…

Hibernate 4.2.8,javassist 3.18.1和ClassCastExceptions –注意您的类路径

我写这篇文章是作为提示和警告&#xff0c;而不是绝对的解决方案。 我将尝试针对我的案例&#xff08;WebSphere 8.5.5&#xff09;返回一种解决方法&#xff0c;但是我确信其他开发人员和应用程序也会受到影响。 我已经花了一些时间来找出问题的原因&#xff0c;所以暂时&…

实现CA和证书申请

文字说明 1 在CA上执行&#xff0c;建立CA cd /etc/pki/CA touch index.txt echo 0F > serial (umask 077;openssl genrsa -out private/cakey.pem 2048) openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 填写多项内容&#xff1a;国家&#xff…

Sx05RE-S905.arm-2.2.1

Sx05re-S905-2.2.1版本安装记录 1、系统Sx05re-2.21 2、盒子型号S905m 3、使用dtb为gxbb_p200_1G_100M.dtb&#xff0c;更名为dtb.img以后&#xff0c;替换到内存卡中 4、打上Sx05re Upgrade 2&3&5&6补丁转载于:https://www.cnblogs.com/Gantz/p/10354826.html

端口如何支持非localhost访问_新特性解读 | MySQL 8.0.19 支持 DNS SRV

转载自公众号&#xff1a;玩转MySQL作者&#xff1a;洪斌MySQL Router 是 InnoDB Cluster 架构的访问入口&#xff0c;在架构部署上&#xff0c;官方给出的建议是 router 与应用端绑定部署&#xff0c;避免 router 单点问题。之前还有客户咨询&#xff0c;能否 router 不与应用…

记录奥运-当今五大Java记录框架之间的竞赛

开发人员&#xff1a;Takipi会告诉您何时新代码在生产中中断– Log4J vs SLF4J简单vs Logback vs Java Util日志记录vs LOG4J2 日志记录实际上是每个服务器端应用程序中古老而固有的部分。 这是应用程序以持久且可读的方式输出实时状态的主要方法。 某些应用程序每天可能仅记录…

移动端实现元素拖拽效果插件_基于自然流布局的可视化拖拽搭建平台设计方案...

LowCode 是高效、高性能的拖拽式低代码开发平台. 也是笔者最近一直在研究的方向, 对于可视化搭建平台的实现方案笔者之前写过很多文章, 这里带大家探索一个新方向——基于自然流布局的可视化搭建平台.在我们之前实现的 h5-dooring 搭建平台中, 我们采用了网格布局的方式来实现拖…

Python数据分析前提-----pandas

pandas&#xff1a;知识脑图 https://bigquant.com/community/t/topic/129755 1、read_csv(url)&#xff1a;读取数据 2、help(read_csv)&#xff1a;打印函数相关用法 3、数据名.dtypes&#xff1a;读取数据的类型&#xff08;int、float……&#xff09; 4、type(数据名&…

07-数据类型

【转】07-数据类型 介绍 存储引擎决定了表的类型&#xff0c;而表内存放的数据也要有不同的类型&#xff0c;每种数据类型都有自己的宽度&#xff0c;但宽度是可选的 详细参考链接&#xff1a;http://www.runoob.com/mysql/mysql-data-types.html mysql常用数据类型概括&#x…

小谈React、React Native、React Web

React有三个东西&#xff0c;React JS 前端Web框架&#xff0c;React Native 移动终端Hybrid框架&#xff0c;React Web是一个源码转换工具&#xff08;React Native 转 Web&#xff0c;并之所以特别提出&#xff0c;是觉得还有些用处&#xff09;。 React、React Native共同…

yii::$app-mongodb 查询纪录数_老詹总决赛有多强?12项数据领先乔丹科比,已握10项数据纪录...

勒布朗詹姆贡献了38分16个篮板和10个助攻的狂暴三双数据&#xff0c;并率领湖人淘汰了掘金&#xff0c;这使得他迈进了职业生涯第10次总决赛舞台。我们都知道&#xff0c;詹姆斯几乎统治着NBA季后赛大部分数据纪录&#xff0c;事实上&#xff0c;他在总决赛同样如此。根据《sta…

摆脱困境:从计划作业中调用安全方法

假设我们已经实现了一个Spring支持的应用程序&#xff0c;并使用Spring Security的方法安全性表达式对其进行了保护 。 我们的下一个任务是使用安全方法实施计划作业。 更具体地说&#xff0c;我们必须实现一个计划的作业&#xff0c;该作业从我们的服务类中获取一条消息&…

前端共享桌面_2020 前端学习路线总结,哎呦,不错哦!

2020 前端学习路线总结在 GitHub 看到一个很不错的前端学习路线图&#xff08;roadmap&#xff09;&#xff0c;从前端基础到前端工程化&#xff0c;再到跨端&#xff0c;都有知识点的覆盖&#xff0c;非常推荐阅读。图下面是我翻译的一个文字版&#xff0c;可以先看图再看文字…

每日一题题目16:简单的python练习题(1-10)

#1.python程序中__name__的作用是什么?__name__这个系统变量用来表示程序的运行方式. 如果程序在当前膜快运行,__name__的名称就是__main__, 如果不在(被调用),则显示为导入模块的名称.扩展:常常这样写if __name__ "__main__":来表名这是整个工程开始运行的入口.效…

Confluence 6 高级性能诊断

请在你的系统服务请求中包括下面所有的信息&#xff0c;如果可能的话&#xff0c;你也可以在请求中包括你认为最有可能出现的问题。这样的话&#xff0c;可以避免我们进一步对你系统的问题进行询问。 系统信息 Confluence 服务器 你系统信息的屏幕截图 Confluences Administrat…