在这篇文章中,我想向大家介绍来自德国的软件工程师、Hibernate爱好者 Kevin Peters。

Kevin Peters, align=

嗨,Kevin。你愿意自我介绍一下并告诉我们一些你的开发者经验吗?

我叫 Kevin Peters,我住在德国,在那里我是一名软件工程师。我在2005年左右开始了我的职业培训,那时我开始接触 Java 语言,并立刻爱上了它。

我为几家公司在 Java 和 Spring 的支持下工作,实现了 ERP 扩展、定制电子商务系统和 PIM 解决方案。大约一年前,我加入了 GBTEC Software + Consulting AG,这是业务流程管理 (BPM) 软件的主要供应商之一,我们现在正在使用 Dockerized Spring Boot 微服务以云为基础的方式重新实现 BPM 系统。

你在 Twitter 上最近提到一个用于验证自动生成语句的数据源代理解决方案。你能告诉我们这个工具是什么以及它是如何工作的吗?

我们使用 Spring Data JPA 和 Hibernate 作为 JPA 提供者来实现我们的持久化层,我们真的很喜欢它带来的便利。但我们也知道在使用 ORM 框架时可能会遇到的“常见”障碍,如笛卡尔积或 N+1 查询问题。

在我们的日常技术讨论和知识转移会议中,我们试图让同事提高对这些问题的认识,我认为实现测试和现实世界的代码示例是达到这一目标的最佳方式。

我开始为我们的技术会议“techtime”准备一个小的映射示例,以展示“无序列表元素集合重建”问题,并想展示这个简单用例中意外的大量查询。

幸运的是,我遇到了ttddyy/datasource-proxy GitHub项目,这个项目在很大程度上帮助我使这个问题具体化。datasource-proxy项目允许你使用代理包装现有的数据源,并允许你按查询类型(例如INSERTUPDATE等)分别计算所有执行的查询。利用这个机会,你不仅可以编写测试来断言你在用例中做了正确的事情,还可以检查你是否以有效的方式做了这些事情,并避免我之前提到的陷阱。

在我们编码架构师Ingo Griebsch建议使用这种方法通过自动化寻找性能瓶颈来增强我们的测试环境时,你在Twitter上提到了你的文章

代理是一种在不使业务逻辑混乱的情况下添加跨切面关注点的好方法。例如,FlexyPool为连接池带来了监控和回退功能。你是否也使用代理来处理其他关注点,例如日志语句?

有很多方法可以用代理、外观或方面来丰富应用程序代码。从使用SLF4J这样的外观进行日志记录开始,使用Spring Security进行访问控制,Hystrix服务间通信,甚至“基本”的Spring Data事务,所有这些功能都是通过代理工作的,我们将不再错过它们。

你为什么选择Hibernate来完成那个特定项目,它是否满足了你的期望,尤其是在应用性能方面?

Hibernate为我们提供了很多便利,特别是如果我们将其与Spring Data JPA结合使用。但让我最享受的是,你仍然可以切换到Hibernate特定的功能,如Hibernate命名查询或特殊的Hibernate注解。

了解何时可以放松使用“魔法”ORM功能,何时需要相反的情况——放弃双向关系,改用HQL,甚至使用数据库原生查询来接收复杂数据,这一点很重要。我们认为,如果知道如何使用它,Hibernate在便利性和性能之间提供了最佳平衡。

因此,我们有一个相当复杂的数据模型和客户,他们存储了大量的数据,在我们的每个用例中,软件都以高效的方式获取和写入数据至关重要。如果有任何疑问,至少你的文章帮助我们正确地完成事情。

我们始终重视用户的反馈,所以你可以告诉我们你希望我们改进什么,或者有哪些功能我们应该提供支持?

总的来说,我们喜欢Hibernate的功能集。只是最近缺少了UNION HQL查询/Criteria API的支持,这将是一个很棒的功能。

感谢你,Kevin,抽出时间。有你在这里是一种巨大的荣幸。要联系Kevin,你可以关注他的Twitter


返回顶部