呦 ^v^-, 写Bug呢?

从入门到放弃?不存在的,赶紧找门先。

lombok和JPA的死递归

这是一个Bug

JPA我觉得是一个封装的很棒的框架,至于说很臃肿这个事,我觉得在需求需要很多复杂查询的时候,不适合用JPA。因为它的封装太棒了,以致于增强了表和实体类之间的耦合。不过在一些简单查询的部分,它真的太好用了。

而关于这个Bug,就不单单是JPA自身的问题了,究其原因是我在实体类中,使用了lombok框架的@Data,这是一个使用注解,在编译时修改语法树并且自动生成Getter、Setter方法并且会实现toString,和hashCode方法得一个框架。其实这个本身也没问题,而且我一直觉得很好用。

可是当这两个因素合在一起的时候,出现了问题。因为在实体类中存在多对多的关联关系,因此实体类A在实例化的时候,会实例化实体类B并调用它的toString和hashCode。可是在实体B实例化的时候,又会实例化对应的A并调用它的toString和hashCode。是的,你猜的没错,这是一个没有结束条件的递归,也可以叫死递归。会出现什么情况呢,简单来说就是一个StackOverflow。

一些想法

知道了问题之后,就会发现其实解决问题就没那么难了。想了一下问题出现的原因,有了一些简单的思考:
1. 框架的封装导致在看不到的地方,可能会有我们意想不到的问题;
2. 在没有真正弄清楚框架在做了什么之前,不要对其完全信任(比如我们可以用lombok,但是要清楚它做了什么,如果没弄清楚还不如用Getter和Setter—反正可以直接生成);
3. ibatis做的好的一点应该就是,它没有封装的太严实,在表和实体之间有了更大的定制空间;
4. 想知道为什么一个东西不好用,自己去用一下。如果你没有不爽,那你就别在说它不好用;如果你不爽了,那就搞清楚自己为什么不爽。

阅读更多
文章标签: jpa bug 框架
个人分类: 踩坑小记 感悟
上一篇思考:为什么要用Spring
下一篇关于计算机
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭