在这篇文章中,我想向您介绍 Jakub Kubryński,一名软件开发者、博主、会议演讲者和 Java 持久化爱好者。

嗨,Jakub。你愿意自我介绍一下并告诉我们一些你的开发经验吗?
非常感谢你邀请我来这里。我的名字是 Jakub Kubryński(在 Twitter 上的昵称是 @jkubrynski)。
我住在波兰。我从7岁开始就喜欢编程。
我的第一门语言是 Fortran 77,这是我父亲教给我的,他是一名空气动力学研究员。2004年,我开始了我的第一份正式工作,作为一名软件开发者,从那时起我就一直从事这个行业。
我的职业道路从初级开发人员到架构师、团队领导、开发经理和培训师。
在过去5年里,我在自己的公司 Devskiller 工作,我们创建了一个用于测试专业软件开发者和 DevOps 工程师技术技能的工具,包括对工具、库和框架的实际知识。
我喜欢你的《JPA 不仅仅是复制粘贴》演示。你为什么决定在会议演示中涉及这个主题?
除了在 Devskiller 的主要工作之外,我还试图通过培训其他开发人员来分享一些我的经验。
在我的职业生涯中,我已经培训了大约700名开发人员。在众多主题中,我进行了许多与 Java 性能和 JPA 相关的培训。
在那些培训中,我意识到许多开发者都存在类似的问题。这些内容在与JPA一起工作时非常重要,为什么不将这些内容涵盖在会议演讲中,以帮助比我培训更多的人呢。
你给过多少次这个演讲,听众在揭开这么多关于JPA和Hibernate性能的技巧时有什么反应?
众所周知,金锤是不存在的。虽然Hibernate仍然是Java生态系统中最受欢迎的持久化技术,但我们不应该将自己局限于一种技术。
例如,有像jOOQ这样的库,它是JPA的绝佳补充,可用于实现基于CQRS(命令查询责任分离)的系统(JPA用于命令,jOOQ用于查询)。
我们通常还会决定将读取模型迁移到非关系型数据库,如MongoDB。
我也很好奇基于Google Spanner白皮书的NewSQL数据库将如何改变现状。目标是获得具有与NoSQL引擎类似性能和可伸缩性的关系型数据库。
由于NewSQL仍然是基于SQL的,我们可能可以使得Hibernate成为它们与Java世界之间的默认接口。
使用JPA和Hibernate时,持久性相关问题的主要原因是什么,开发者应该怎么做来克服这些问题?
最大的问题是开发者对Hibernate过于信任,以至于甚至不检查底层的查询。事实上,仅通过更改几行代码,如将java.util.List
替换为java.util.Set
,删除连接表或在查询中添加fetch joins,就可以大幅提高映射和JPQL查询。
还有对一级缓存行为的严重误解,这在批量处理时尤为重要。
最后但绝对不是最不重要的是,这个问题与Open Session in View反模式有关。允许开发者忽略事务边界可能会导致产品发布到生产后出现严重的性能问题。
我们始终重视用户的反馈,所以你能告诉我们你希望我们改进什么,或者有哪些功能我们应该提供支持?
首先,我要向你表示祝贺。Hibernate是(之一或最老?)最古老且仍活跃的开源项目之一,与企业Java相关。
我认为你加入核心团队的时刻使团队精神焕然一新。我希望你会继续努力使Hibernate对新手来说更简单——即使只是通过发现和记录与实体建模相关的常见不良实践。
感谢Jakub抽出时间。能邀请你来这里是一种极大的荣幸。要联系Jakub,你可以关注他的Twitter。