`
sdiablo
  • 浏览: 8249 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

hiebrnate有哪些沟壑--原作Qieqie

阅读更多
hiebrnate有哪些沟壑
1、Session是本次使用到的持久对象的容器,并内在使用jdbc的connection派发sql
2、Session的生命周期,不同的应用可能有不同的策略,是一次数据操作一个Session,或一个用户请求共享同一个Session?
后者可能使用到了Open Session In View Filter/Interceptor.或hibernate3的sessionFactory.getCurrentSession()
3、对象与容器的几种关系,以及如何转化?同样Id的对象是否可以有多个copy在容器中?
4、session flush是什么意思,什么时候会(自动)flush
5、load或object的many-to-one可能会用到proxy,这是什么意思?lazy-loading与此有关。
6、hibernate对集合的理解和处理
7、hibernate对cascade的理解和处理
。。。

hibernate有哪些局限:1、session是一个容器,一次session装载过多object,会爆棚=>解决之道:evict, bulk operation
2、session总是装载一个对象的所有属性列,如果该属性数目够大(>50),会对性能有所影响=>解决之道:对类或表列进行适当分拆
3、session默认总是对持久对象建立snapshot,所以1个对象将占用2倍的空间。=>一般这个不造成问题,除非是以上 1 的情况
。。。

hibernate"奇怪"的地方
1、save/perist一个对象时,为什么有的对象立即发送一个insert语句,有的不是:
这和主建策略有关,程序自己assign的主键,hibernate不会立即发送insert,其他的会

2、设置了join策略,但对query查询无效
对对象的某个to-one的属性设置join策略只load/get或nav到该对象时有效,query查询无效,哪怕该查询只返回一个对象。

3、修改对象时候,为什么抛出错误:
在Session的生命周期内,已经被Session管理的对象的数据库更新语句会自动被hibernate检测在必要的时候发送。
所以,程序没有必要调用dao.update/object.update(in active record pattern)的方法。如果调用了dao.update方法,则会抛出该错误。

4、那为什么同样的程序我调用就是错误,别人update就可以调用,而且必须调用才会更新到数据库?
那是因为“别人”的session周期很短,和“我自己”使用的Session周期策略不一样,他调用update时所使用的session已经不是前一句load/get/query该对象后的session。
也有可能是“别人”update的对象和刚才load/get/query出来的对象是同一个对象(==返回true),此时update方法是多余的,但是调用了也不会发生错误(update的意思是:将一个还没有被给定session管理的detached对象交给session管理,但是如果该对象本来已经被session管理了,session也不会抛出错误)
5、不想更新某个数据,但是hibernate却自动给我更新到数据库,真是想不到:
一个对象如果被Session管理(之前从session load/get/query出来或该对象被update到session后),如果该对象的属性变更了,这会被hibernate检测到,会自动被派发update sql,所以不要去更新他的值,如果本意不是要把“更新持久化”到数据库的话。
。。。

小心:
二级缓存 总是要特别的注意,这是一个大策略,不是API级别的决定。


以上观点均被本人实践过,也仅为片面摘要。
分享到:
评论

相关推荐

    qieqie.zip_signal set

    《信号处理与线性方程组解法:基于qieqie.zip_signal set的分析》 在信息技术领域,信号处理是研究、分析和修改信号的重要手段,它在通信、图像处理、生物医学信号分析等诸多领域都有广泛应用。而线性方程组的求解...

    solr全文检索

    `solr/home`目录包含`conf`和`data`子目录,`conf`下有`schema.xml`和`solrconfig.xml`等配置文件,`data`则存储索引数据。 **三、Schema配置** 1. **`schema.xml`**:定义字段类型(types)、字段(fields)以及...

    使用 Simulink(R) 在 AWGN 信道上执行带穿孔的软判决维特比解码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    极化码的高斯近似过程,基于matlab平台.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    广东省关于人工智能赋能千行百业的若干措施.docx

    广东省关于人工智能赋能千行百业的若干措施.docx

    湖北省数据条例(草案)(征求意见稿).docx

    湖北省数据条例(草案)(征求意见稿).docx

    CSS网站布局与开发技巧(pdf电子书)最新版本

    中软国际IT培训中心的培训教程,属于学习CSS网页设计的基础入门教程,讲一些原理和概念,高深的理论不太多。

    Python 中数据结构和算法的最少示例.zip

    Python Data Structures and Algorithms Minimal and clean example implementations of data structures and algorithms in Python 3. Contribute Thank you for your interest in contributing! There are many ways to contribute to the project. Start testing from here Take note when running all tests using unittest $ python3 -m unittest discover tests To run some specific tests you can do the following (e.g. sort) $ python3 -m unittest tests.test_sort Run all tests using pytest Make a note when $ python3 -m

    TeamIDE-win-2.6.31Team IDE 集成MySql、Oracle、金仓、达梦、神通等数据库、SSH、FTP、Redis、Zookeeper、Kafka、Elasticsearch、M

    TeamIDE-win-2.6.31Team IDE 集成MySql、Oracle、金仓、达梦、神通等数据库、SSH、FTP、Redis、Zookeeper、Kafka、Elasticsearch、M

    C/C++/Python/Java四种语言下的算法实现资源概览

    内容概要:本文综述了C、C++、Python、Java这四种主流编程语言中,用于实现常见和高级算法的学习资料,覆盖范围广泛,从书籍、在线课程平台到GitHub上的开源代码仓库均有提及。每种语言都详述了推荐的学习资源及其优势,旨在满足不同程度学习者的需要。 适合人群:对算法实现有兴趣的学生、自学爱好者、开发者等。 使用场景及目标:帮助读者挑选合适的语言和资源深入理解算法的理论与实际编码技巧,适用于个人提升、项目实践或教学使用。 其他说明:文章提供了丰富的学习渠道和实战项目,既适合作为基础理论的学习,也适合于实际操作练习,尤其强调通过实做加深理解的重要性。

    aiuiphone0000000000000000000

    aiuiphone0000000000000000000

    支持多场景回调开箱即用 原生仿百度登录验证.zip

    支持多场景回调开箱即用 原生仿百度登录验证.zip

    2023 年“泰迪杯”数据分析技能赛B题-企业财务数据分析与造假识别

    2023 年“泰迪杯”数据分析技能赛B题-企业财务数据分析与造假识别 完整代码

    Levenshtein Python C 扩展模块包含用于快速计算 Levenshtein 距离和字符串相似度的函数.zip

    Levenshtein Python C 扩展模块包含用于快速计算 Levenshtein 距离和字符串相似度的函数内容需要维护者介绍文档执照历史源代码作者需要维护者我 (Mikko Ohtamaa) 目前不维护此代码。我只是为了方便起见才将其拉到 Github 上的(之前在公共存储库中不可用)。因此,如果您提交了任何问题,我都不会调查。介绍Levenshtein Python C 扩展模块包含用于快速计算的函数Levenshtein(编辑)距离和编辑操作字符串相似度近似中位数字符串,以及一般字符串平均值字符串序列和集合相似度它同时支持普通字符串和 Unicode 字符串。需要 Python 2.2 或更新版本。StringMatcher.py 是一个基于 Levenshtein 构建的类似 SequenceMatcher 的示例类。它缺少一些 SequenceMatcher 的功能,但又有一些额外的功能。Levenshtein.c 也可以用作纯 C 库。您只需在编译时定义 NO_PYTHON 预处理器符号 (-DNO_PYTH

    基于OpenCV像素检测的Onmyoji游戏脚本

    基于OpenCV像素检测的Onmyoji游戏脚本

    机器人算法的 Python 示例代码 .zip

    Pythonbot高斯网格图射线投射网格图激光雷达至网格地图k-均值对象聚类矩形接头大满贯迭代最近点 (ICP) 匹配FastSLAM 1.0路径规划动态窗口方法基于网格的搜索Dijkstra 算法A* 算法D*算法D* Lite 算法位场算法基于网格的覆盖路径规划国家网格规划偏极采样车道采样概率路线图(PRM)规划快速探索随机树(RRT)回程时间*RRT* 和 reeds-shepp 路径LQR-RRT*五次多项式规划Reeds Shepp 规划基于LQR的路径规划Frenet 框架中的最佳轨迹路径追踪移动到姿势控制斯坦利控制后轮反馈控制线性二次调节器 (LQR) 速度和转向控制模型预测速度和转向控制采用 C-GMRES 的非线性模型预测控制手臂导航N关节臂对点控制带避障功能的手臂导航航空导航无人机三维轨迹跟踪火箭动力着陆双足动物倒立摆双

    可信任的企业4.0生态系统.pptx

    可信任的企业4.0生态系统.pptx

    C语言档案管理系统 代码完整

    学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,系统提供菜单方式作为人机界面并具有如下功能: 学生信息录入功能 学生信息浏览功能 按学号、姓名等进行查询、排序功能 2、要求界面简单明了;对输入的数据具有有效性检查能力,比如输入的成绩不在0~100之间,要求重新输入;

    原生js谷歌网页电吉他弹奏源码.rar

    原生js谷歌网页电吉他弹奏源码.rar

    原生js微信分享到朋友圈浮动层代码.zip

    原生js微信分享到朋友圈浮动层代码.zip

Global site tag (gtag.js) - Google Analytics