系统优化之路——hibernate细节之战
来源:互联网 发布:防身甩棍淘宝网 编辑:程序博客网 时间:2024/04/30 10:19
这两天在系统上线,测试提了一个BUG但是到我的机器上不能复现,和测试沟通后,在log里找到了bug的详细信息,显示在测试和我同时插入数据时,发现数据库爆出了违反唯一性约束的错误,当时我就意识到,有可能是ID生成策略的问题,经过几番教验发现,真的是细节决定成败!
问题:
并发插入新数据,违反唯一性约束
原因:
ID生成策略:
以前:
increment
----表示新增数据操作时由hibernate自动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.适用于采用代理主键形式的主键列。同样不能用于主键列是自动增长的表。但是,该主键生成策略也有些缺点。
(1)新增数据前先查询一遍,影响了性能。
(2)主键的类型只能为数值型的int或者long
(3)并发操作时的冲突问题。
更改:
native
----表示根据不同的数据库采用不同的主键生成策略。比如,当前数据库为sqlserver,则会采用identity,如为oracle,则采用 oracle中的sequence等。区分数据库的不同是以hibernate主配置文件中sessionFactory中配置的数据库方言。
更改时考虑:
1, increment 时,id类型已经为number,修改为其他类型,影响已有模块的逻辑!
2,改动较少,对数据库的改动,仅仅是发个sql,不改变数据库和代码结构!
发散:
在数据库配置中我们有一点疏忽, <class name="com.zlwy.rcss.entity.BBriefDict" table="B_BRIEF_DICT" schema="SEMS"> 大家看schema="SEMS",在oracle中这是规定只能有sems用户操作,虽然安全了一些,但是在移植数据库到用户机器的时候,发现,用户那的用户命名和我们不一样,我们要更改所有的表,去了这句话,虽然安全性降低了一点,但是移植性大大增加!
总结:
细节决定成败,理论必须用于实践,HIbernate理论已经学了一年了,例子也敲了不少,真正用于项目才发现,理论离项目还很远,需要我们补充很多细节上的东西,需要我们了解80%配置的大概信息与功能,需要我们根据要求能迅速作出合适的变更,需要我们熟练基本的操作,在现场能迅速解决客户的问题,而且针对有过变成经验的客户,我们的专业与熟练恰恰是提升公司于个人声誉的重要手段!
- 系统优化之路——hibernate细节之战
- 细节优化之UITextField
- 机房收费系统—细节优化
- 机房收费之细节优化
- PHP代码优化之细节优化
- hibernate之性能优化
- Hibernate之性能优化
- hibernate优化之批量处理
- Hibernate之性能优化策略
- Hibernate之多端加载优化
- 程序的性能优化之代码上的细节优化
- hibernate优化(一) 之session优化
- 项目管理——细节之处见真章
- python细节之——lambda
- 仿百度壁纸客户端(六)——完结篇之Gallery画廊实现壁纸预览已经项目细节优化
- 诗歌rails之系统性能优化之路
- Hibernate学习笔记(3)之其它细节
- 代码细节的终极优化之循环展开、多路并行
- 机器学习 实用技巧
- 数字金额转换大写
- error: expected specifier-qualifier-list before xxx (a structure )
- 判断大数是否为素数 (费马小定理+Carmichael数判断)
- Java数组操作十大方法
- 系统优化之路——hibernate细节之战
- 4*4键盘程序代码 基于STM32
- Linux(Ubuntu)卸载Python后
- python实现简单爬虫模拟登录淘宝(cookie简介)
- xmltodict:让你像处理JSON一样处理XML的Python模块
- EventBus使用详解(一)——初步使用EventBus
- Ubuntu 12.04 中安装和配置 Java JDK
- LeetCode 125 Implement strStr()
- bzoj 3669: [Noi2014]魔法森林