• 众所周知,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. 无人车版「驾校」在长沙开业,7天24小时营业,无人值守的那种
  2. python函数定义中参数列表里的参数是_python函数定义中的参数说明
  3. Linux下导出MySQL为SQL文件_MySQL导入导出.sql文件步骤
  4. 如何查看linux系统源码
  5. Cairngorm 3 libraries 简介 是通过google翻译加上自己的理解得来的
  6. 断路器之一:Hystrix 使用与分析
  7. html5 (个人笔记)
  8. 【机房收费系统C#版】——导出Excel
  9. 2004级C++试题及答案
  10. 20个最漂亮的基于WordPress的企业网站
  11. layui开关按钮,checkbox复选框开关按钮效果美化
  12. MySQL创建企业信息表,基于数据库mysql创建学生信息表(简易版)
  13. 新手怎么入门电子电路设计?
  14. 终于找到破坏(被锁)广联达云计价平台GCCP6.0工程文件的罪魁祸首,显示:您的工程可能受到盗版侵害……
  15. Cortex-M3 (NXP LPC1788)之启动代码分析
  16. lob移表空间 oracle_关于oracle带lob对象的分区表,移动表空间的问题
  17. 史玉柱加持,Playtika上市能否圆昔日“巨人”翻身梦?
  18. 用 Python 解数独(Sudoku)
  19. UART模块验证-面试总结
  20. LaTex - PPT 模板-1 (亲测可用)

热门文章

  1. SpringMVC注解@CrossOrigin解决跨域问题
  2. IDEA 修改JDK版本后,没有效果,编译还是报错。
  3. 基于Android studio的阅读APP设计与实现
  4. 《网络安全》博客-----ip地址的划分
  5. Ubuntu 20.04 下Fabric V2.2.0 和 V1.1.0 运行及配置说明(均可运行)
  6. ASN.1 Editor工具下载和使用
  7. Linux创建新用户并使用证书远程登录
  8. Scratch3.0连接EV3,WEDO2.0的方法视频讲解。
  9. 计算机中丢失EBBASE.DLL,win7丢失combase.dll怎么办_win7缺少combase.dll一键修复-win7之家...
  10. 电脑出现缺少XXX.dll文件的解决方法