什么,还在用hibernate?mybatis它不香吗?很多跳槽的java程序员遇到新的公司在使用hibernate,都会强烈吐槽这一个点,包括我以及我身边的同事,这里有其实有必要解释一下,很多公司的代码都是好几年前的代码框架,如果改动,成本实在太大,还有很多不必要的麻烦,甚至于当前公司的大佬早已习惯hibernate的映射关系,所以还是默默的熟悉hibernate吧,打工人。
而对于不熟悉hibernate的人在日常开发中,就会异常崩溃,今天就来细数一下我在工作中遇到的坑吧~因为早些年也大致了解过hibernate,但是没有深入,之后一直用的mybatis,直到最近跳槽,新公司用的hibernate框架,但是我发出了文章开头提到的感慨。我遇到的第一个坑,那就是对象懒加载的坑~
懒加载
由于我用的电脑是公司上一个同学留下的,我看到他的idae上有一个beautiful插件(代码开发过程中自动生成对象的set方法),当时我就纳闷了,这个插件不常用啊,于是我就卸载了。之后我看到一个方法叫做buildXxxx(),大致内容就是把对象的重新赋值一遍,对象属性再去数据库查询一边再赋值,用惯mybatis的人会觉得多此一举,但是hibernate不一样,由此引发对懒加载的思考。
当我们查询一个对象的时候,在默认情况下,返回的只是该对象的代理对象,当用户去使用该对象的属性时,才会向数据库再一次发出查询语句。
例如,有一个对象是Employee,还有一个对象是Department。显然,对于Employee相对Department来说,是多对一的关系;而对于Department相对Employee来说,是一对多的关系。当我们查询Employee对象的时候,如果希望通过employee对象的属性department查询到所对应的Department,那么是会抛出异常的。这是因为懒加载的存在,在session关闭之后,hibernate又向数据库发出一次请求,结果就抛出异常了。
一次次的NullException简直让我崩溃,明明断点查看部位null啊,显示一个handle,之后才发现,原来buildXxx就是为了避免以上提出的问题,到这时我才知道为什么要装beautiful插件,于是我尴尬的装回了它,嗯,真香~
@Column导致中文乱码
上周开发新接口时,前端反应乱码,于是我就想,代码还是那些代码,为啥就乱码了呢,我一度怀疑是前端的问题,于是我就用postman试了一下,oh,结果不出意外,我的问题,于是我仔细想了想,问题肯定出在hibernate自动建表这里,于是我看到了我的entity,大致一看,没有什么问题啊,于是我检查了一下,这才发现了问题。
@Column注解下的String类型对应数据库类型默认是varchar(255), 大家知道问题出在哪儿了吧,解决办法便是指定一下字段对应,然后删除表(这里一定要删除表,hibernate不会更新已有字段属性!)
@Column(columnDefinition = "nvarchar(255)")
今天就说到这了,希望对大家有帮助~
end
人生嘛,随便聊聊
影视嘛,直接回复片名,获取免费观看地址
如地址失效或搜索不到,请添加“留仙一码农”
推荐使用小程序(公众号主页点击哈克精选打开)观看~
推荐阅读
• 一个女人,两个男人,同房间,我都不舍得快进
• 2020-11-13,星期五,勇气
• 穿着比基尼,为何满身泥泞?
• 2020-11-12,星期四,生活
如有收获,点个在看,诚挚感谢 明天见(。・ω・。)ノ♡