Java 我的开发团队应该使用Hibernate吗?

Java 我的开发团队应该使用Hibernate吗?,java,oracle,hibernate,jakarta-ee,architecture,Java,Oracle,Hibernate,Jakarta Ee,Architecture,简介 我是我开发团队中最新的成员。我们主要进行Java web开发并使用Oracle数据库,但很少使用其他RDM。为了扩展我的专业知识和探索更现代的方法,我决定学习Hibernate 到目前为止,我还不确定这是否适合我们的团队,但我不能确定这是因为Hibernate不符合我们的需要,还是因为我们遵循了Hibernate“不愿意”出现的糟糕做法 例如,几乎所有与数据库的交互都是通过标准JDBC CallableStatements和存储过程进行的。我们迭代结果集,并将它们放入bean/pojo中供

简介
我是我开发团队中最新的成员。我们主要进行Java web开发并使用Oracle数据库,但很少使用其他RDM。为了扩展我的专业知识和探索更现代的方法,我决定学习Hibernate

到目前为止,我还不确定这是否适合我们的团队,但我不能确定这是因为Hibernate不符合我们的需要,还是因为我们遵循了Hibernate“不愿意”出现的糟糕做法

例如,几乎所有与数据库的交互都是通过标准JDBC CallableStatements和存储过程进行的。我们迭代结果集,并将它们放入bean/pojo中供web应用程序使用。据我所知,Hibernate喜欢精确地建模表(
@Entity
@Table
)及其列。对于简单的
SELECT
查询,这是一种稍微简单一些的方法。然而,对于复杂的数据库工作(考虑对原始数据运行分析),我要么在Java代码中大量操作数据(并最终放弃映射表的实体类),要么通过丑陋的
会话调用存储过程,这似乎挫败了使用Hibernate的全部意义

我不知道的假设: 我的团队很早就告诉我,他们认为在数据库(即存储过程)中进行“繁重工作”比在应用服务器(即Java)中进行“繁重工作”更好,我不知道他们是对还是错。如果他们是对的,那么为什么像Hibernate这样的ORMs会存在呢

此外,我还发现Hibernate的学习曲线非常僵硬,但我觉得我完全没有抓住要点。数据库表是否应该完全模拟web应用程序中所需的数据?我们的设计方法学有那么远吗

最后,我知道存储过程vs ORM是一个热门话题,但趋势似乎是在ORM的“一边”。为什么

tl;dr
Hibernate似乎只在最简单的情况下帮助我们的用例,以一堆复杂的配置和额外的资源作为权衡。我遗漏了什么?

长话短说,如果您对在项目中使用Hibernate提出质疑,请不要使用它。更好地正确设计DAO和DTO,这样日常操作就不会花费太多精力来实现。另外,请参阅SpringJDBC模板,它的功能可能会真正帮助您


另外,如果您的团队不熟悉Hibernate,那么使用它将非常困难

我只是分享一下我的经验。我正在做一个项目,在应用层之间有一个清晰的分离;我的团队负责服务器端代码,另一个团队负责数据库,另一个团队负责配置和维护应用程序容器。在这个场景中,Hibernate(通常是一种ORM)允许我们独立于(我知道,不是完全独立于)数据库实现细节

在我看来,另一个优势(但这取决于数据库结构),是使用Java和OO模式浏览表关系的可能性,我发现这种可能性非常有用。在这种情况下,请考虑懒惰加载。


祝你好运

请阅读@Hibernate对于简单的东西很有用。对于较难的材料,对象关系阻抗不匹配成为一个问题。RDBMS非常擅长做RDBMS类型的事情。Java开发人员倾向于ORM,因为他们是Java开发人员,而不是SQL开发人员。这个问题需要一个基于意见的答案,所以我投票决定结束它。答案几乎完全取决于团队。看起来你有一些数据库程序员™ 在团队中,这几乎保证了对新ORM技术的敌意。一般来说,这更多的是一个人的问题,而不是一个技术问题。@dasblinkenlight这本身就是一个答案。我在寻找为什么我的方法看起来如此不一致。如果是“人们对这些技术的偏见取决于他们的背景”,这本身就是一个答案。“人们有意见”,因为答案不是“基于意见的答案”。关键是,你可以根据人、技术、项目、环境等来争论任何一种方式,基本上是无限期的。感谢Spring JDBC模板的提示。我已经在使用Spring了,我觉得它会很好地适应。但这将是一场斗争——一次。不熟悉某件事是完全避免它的一个很糟糕的理由,它是去调查它的完美理由。让我换一种说法:如果你不熟悉炸薯条,我希望你至少去闻一闻,这样你可能也会尝一尝。如果你不喜欢这种味道,你可以一直吃生土豆。不知道我现在是否被理解。我没有把它作为拒绝使用Hibernate的理由,我只是把它作为一个注释(这就是为什么它出现在P.S.)。显然,@WannabeCoder有更多的理由寻找替代品。