• 众所周知,hibernate是优秀的ORM框架,不过在使用过程中,还是遇到了不少令人费解的问题。
  • hibernate有两个配置文件,一个是hibernate.cfg.xml,另外一个是hibernate.properties。前者是当面5.2版本推荐的,而后者是曾经用过的版本,可能为了兼容,这两个配置文件都可以使用,并且先从后者读取参数。至于前者会不会覆盖,有待深究。我一般只用前者,后者都不会放在项目中,当然会提示找不到该文件,不过无碍。
  • 有意思的是,springBoot放弃了xml,转向property,并且通过层次的变量名代替原先xml复杂的结构,而hibernate正好相反;
  • 既然所有配置都可以放在hibernate.cfg.xml,不幸的是,我没能从hibernate官方网页上找到所有配置集成的页面。
  • 当我把hibernate从4X升级到5X时,提示MySQL5InnoDBDialect被弃用
package org.hibernate.dialect;/** A Dialect for MySQL 5 using InnoDB engine** @author Gavin King,* @author Scott Marlow* @deprecated Use "hibernate.dialect.storage_engine=innodb"
environment variable or JVM system property instead.*/
@Deprecated
public class MySQL5InnoDBDialect extends MySQL5Dialect {@Override
protected MySQLStorageEngine getDefaultMySQLStorageEngine() {return InnoDBStorageEngine.INSTANCE;}
}
  • 尽管说提示说的很明确,需要在系统的环境变量或者java虚拟机配置hibernate.dialect.storage_engine=innodb,但下意识的还是觉得上面的变量是配置在hibernate.cfg.xml中,于是自动建表时,使用的引擎还是MyISAM

  • 而使用百度搜索MySQL5Dialect,出现的内容重复的东西太多。无奈在Stack Overflow上提问,得到正确答案。
    https://stackoverflow.com/questions/48062256/where-to-put-hibernate-dialect-storage-engine-property

  • 不得不说,MySQL5Dialect和MySQL55Dialect,这种命名只差一个5,很恼人,尤其是在没有系统浏览hibernate类目录结构时,很容易疏忽。Stack Overflow上类似的问题不少,但回答很少且不是正确答案,我提问的有正确的回答还是挺幸运。

  • 除了查阅参数不便之外,hibernate异常以及日志记录也比较佛性,例如show_sql,即便打印了sql,并不是真正的执行sql,替换的变量没有填充进去,这一点也很烦躁。如果出错,你拷贝出来的sql并不是最终执行的sql,需要自己替换,提高了调试排错的难度。

  • 当然,我在替换MySQL5InnoDBDialect时,直接用它的父类去替换是有问题的,控制变量作为基本的实验方法,应当遵守。但Hibernate既然提供了MySQL55Dialect这样的类,应当在被弃用的方法中说明,毕竟配置环境变量或设置JVM变量这样的替代方法,相对来说比较复杂,对版本升级并不友好。

  • 顺带一枪,聊一聊mybatis,面试的时候,我经常问一些工作了三五年的老司机,mybatis的优势,比较普遍的回答是把sql写在xml文件中,容易看清业务逻辑,以及适合复杂的sql。问题是,真是这样子嘛?

  • mybatis对于sql拼接参数,相对来说比较繁琐,而在阅读业务代码时,如果需要通过sql来理解业务逻辑,代码是有多搓。一般来说,稍微复杂的sql,应当在方法中加上清晰的注释,去理解大长串的sql,实在是下下策。
  • 另外我们在阅读代码时,习惯一个一个放大点进去,从java代码跳到xml,不累嘛?

  • 回头看看springBoot,springBoot在使用时,集成了hibernate,同时也提供了自己的jdbcTemplete,并且一些简单的查询可以通过方法名直接出结果。可以说springBoot也意识到了hibernate的一些不足,所以提供了一些额外的使用方法,但并没有完全抛弃hibernate,尤其是对象-sql结果这样的映射,完全吸纳了hibernate,这确实是hibernate的精髓。

慎用hibernate相关推荐

  1. 在Kotlin代码中要慎用Java 8 的 Stream API

    因为会有性能损失. 测试代码: 1.Java 中直接使用 Java 8 的 Stream API: package i;import java.util.ArrayList; import java. ...

  2. Hibernate 性能优化技巧

    在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数据量的,可以使用session.clear()或者session. ...

  3. open session and Hibernate事务处理机制

    相关文章: Hibernate入门 - Transaction 使用OpenSessionInView模式时的一个异常问题解决方法 推荐圈子: 青岛javaeye 更多相关推荐 在没有使用Spring ...

  4. java之hibernate之 cascade和inverse

    1.Cascade是级联动作,在many_to_one中如果使用cascade可以级联操作关联对象,如下代码可以级联保存Category对象. 在Book的映射文件设置 <many-to-one ...

  5. org.hibernate.PersistentObjectException: detached entity passed to persist

    简单地来看,将一个游离的对象要被持久化(save)时报错.  我们知道要持久化对象时候,通常Hibernate会根据ID生成策略自动生成ID值,但是这个对象ID已经有值,所有抛错.这个错误会出现在配置 ...

  6. 对Hibernate使用之愚见

    对Hibernate使用之愚见   国人跟风之潮,自古有之,至今亦然. 确实,经过配置优化的Hibernate效率与无任何优化的Hibernate效率诚然不可同日而语.但由于项目开发的复杂性,开发周期 ...

  7. (八)Hibernate的一对多关联关系

    一.概述 例如,以客户(Customer)和订单(Order)为例,一个客户能有多个订单,一个订单只能有一个客户. 从Customer到Order是一对多关联,在java类中的面向对象设计应该一个Cu ...

  8. Hibernate入门-03

    课程回顾:Hibernate第二天 一对多(添加联系人案例) javaWEB中一对多的设计以及建表原则 编写JavaBean(注意一对多的编写规则) 客户的JavaBean(一方) 联系人的JavaB ...

  9. Hibernate中的注解说明

    Hibernate中注解注解比较多,常用的也就那么几个,在这里把Hibernate中的注解汇总总结一下. @Entity:将一个类声明为一个实体bean,即一个持久化POJO; @Id:声明bean的 ...

最新文章

  1. 02 数据类型 (向量 数据框 矩阵和列表
  2. springboot解决js前端跨域问题,javascript跨域问题解决
  3. 【捣鼓】移动硬盘装Ubuntu系统
  4. java任务poer_java-Powermock-模拟超级方法调用
  5. Java核心类库篇6——IO
  6. 浏览器缓存机制(优化)
  7. 使用tensorboard可视化tensorflow模型
  8. 【转载】规则化和模型选择(Regularization and model selection)
  9. linux异构内存,Linux内核添加异构内存管理(HMM)将带来加速GPU的新方式,还有可能带来其他类型的机器学习硬件。...
  10. 正则表达式(二)之元字符
  11. 如何在HTML网页引入思源黑体
  12. html网页挂马,浏览器安全之网页挂马实战 ——合天网安实验室学习笔记
  13. 【微信篇】电脑版微信的照片视频文件位置变化
  14. 利用Reachability判断网络环境(WAN/WIFI)
  15. 第三届全国中医药院校大学生程序设计竞赛(部分题解)更新中~
  16. 科研笔记(一) 室内定位技术讲解
  17. 数据库:MySQL 修改密码
  18. python读取txt文件代码-Python txt文件常用读写操作代码实例
  19. 学计算机专业的人,如何让别人明白“学习或从事计算机专业的人不一定会修电脑”,只是会秃头!...
  20. opencv在linux系统下利用从cv2进行摄像头读取操作

热门文章

  1. 测试用例驱动阅读Express源码
  2. Android4.2.2 Gallery2源码分析(9)——三个界面的跳转
  3. 学习FFMPEG,为Encode Filter做准备
  4. Windows系统下MySQL8.0版详细安装及配置教程
  5. 明日方舟灰齐山麓挑战任务怎么做
  6. AIR 063 | 专访北航著名教授王田苗老师:创新创业的时代到来了
  7. linux 4412 adc字符设备,迅为4412开发板Linux字符设备控制(二)
  8. lammps计算应力
  9. GitHub(九):掌握 Issues
  10. fis3 html 变量替换,百度构建工具fis3常用命令及配置写法