在这篇文章中,我想向大家介绍一位软件开发者、博主、Java 持久化爱好者——Arnold Gálovics。

Arnold Gálovics, align=

嗨,Arnold。你想介绍一下自己,并告诉我们一些你的开发经验吗?

嗨,Vlad。首先,我想感谢你邀请我。我叫 Arnold Gálovics(《Twitter》上的@ArnoldGalovics)。我25岁,目前居住在匈牙利首都布达佩斯。

自从我有了第一台电脑以来,我总是对软件的工作原理感到好奇,所以我进入了软件开发行业,想看看幕后发生了什么。

在过去的5年里,我在电信行业工作,负责开发一个纯内部使用的应用程序,这个应用程序主要是获取和操作我们需要的资料,最后将其连接在一起。

之后,我进入了金融行业,现在我在一个非常有意思的项目上工作,我们在创建一个包含所有新潮工具/技术的巨大平台。

在过去的几年里,我主要关注标准的Java堆栈、Oracle、JPA/Hibernate、Spring、Eclipse RCP、Angular。一开始,当我进入JPA世界时,它对我来说就像真正的魔法,人们对这样的工具如此聪明,我几个月前想尝试自己参与开源社区,我选择了Hibernate ORM,因为它对我很熟悉,当然,我也想回馈一些东西。

同时,我也开始了一个技术博客,我很喜欢在上面发布文章。尽管如此,由于我现在全职工作担任高级软件工程师,我没有太多时间投入到博客写作中,但我尽可能地去做。

你在你的博客上发表了关于JPA和Hibernate的几篇文章。[查看文章](http://blog.arnoldgalovics.com/tag/hibernate/)。在你的经验中,JPA和Hibernate是否是典型Java EE应用的合理选择?

当然。尤其是对于较小的项目,当然对于较大的项目也是可靠的,只要你理解你所做选择的结果。在合适的条件下,对于一个关系型数据库,Hibernate是一个非常不错的选择。

有很多优秀的特性能够帮助你在整个应用演变过程中,我强烈地感觉到,最近Hibernate团队在使ORM框架更好方面做得非常出色。

正如我提到的,Hibernate提供了许多优秀的特性,但人们往往认为Hibernate是一剂万能药,他们通常不理解概念或如何使用某些特性。

主要问题是人们往往会忘记在JPA/Hibernate下,会有SQL语句在底层数据库上执行,他们对此不关心,因此会遇到应用性能问题。

有一些简单的事情你应该注意,比如声明式事务管理的merge陷阱、实体状态转换、只获取你需要的资料等。

我见过许多项目在数据访问层使用反模式,比如将每个关联设置为EAGER获取、有一个通用的数据访问层、错误的交易边界等。

通常,在遇到几个性能问题后,项目会想要放弃JPA/Hibernate,转而使用纯SQL以获得更好的性能,然而,我认为理解问题并验证执行的SQL语句,而不是完全放弃ORM,才是正确的方法。

我的主要信息是:你可以为你的项目使用JPA/Hibernate,只需理解它是如何工作的以及如何高效地使用它。有许多书籍、博客、用户指南都有很大的改进。

我个人推荐阅读Vlad的《高性能Java持久化》[查看书籍](https://leanpub.com/high-performance-java-persistence)和他的博客[查看博客](https://vladmihalcea.com/),因为你可以从中学习到很多东西。

我也建议访问我的博客[查看博客](http://blog.arnoldgalovics.com/),因为我通常写关于Hibernate和性能相关的问题。

在开发企业应用时,你是从一开始就考虑性能设计,还是以“过早优化”的名义推迟它?

在过去的几年里,我看到了许多问题,其中大部分是由于事先没有考虑性能导致的。我认为JDBC批处理是完美的例子,因为有很多需要注意的事情,比如JDBC驱动程序、底层数据库、在事务中途不刷新、排序等。

在我看来,从一开始就考虑性能是非常重要的,因为在数据访问层中可能有很多事情会出错。

我们始终重视用户的反馈,所以您能否告诉我们您希望我们改进的地方,或者是否有需要支持的功能?

非常感谢Hibernate团队,因为你们为社区制作了一个伟大的工具。我认为Hibernate目前处于大多数功能已经到位,只需要进行一些小调整的状态,所以这里我不会添加任何特殊的内容。

感谢您抽出时间,阿诺德,能够在这里见到您是我们莫大的荣幸。要联系阿诺德,您可以在Twitter上关注他。


返回顶部