Jpa和Hibernate - 标准还是功能?

3
我们正在启动一个项目,我们的架构师想要使用标准化的一切(例如使用日历而不是JodaTime- JPA2 vs Hibernate 4)。我使用了JPA2,意识到在追求“标准”和可移植性的前提下失去了很多功能。
所以我问这个问题:为了符合标准值得失去一些功能吗?为什么?
更改ORM以考虑可移植性是否常见?
他们有一个7年历史的项目,仍然使用OJB作为它们的ORM......你能给我一些启示吗?
谢谢。

2
JodaTime比日历更好?哦,所以他想使用低标准。 - Daniel Alexiuc
他说这是因为JodaTime不符合Java标准,而JPA与Calendar兼容。 - Benjamim
5个回答

2

根据我的经验,使用Hibernate 4后您将不会在应用程序中更改ORM框架。与非标准相比,标准的发布周期很长,这使得获取新功能或错误修复变得困难。 此外,我认为Hibernate是一种准标准。Hibernate提供比JPA更多的功能。我不会放弃它们。


1

标准解决方案的优点在于每个人都在使用它们。这意味着:

  1. 更容易雇用熟悉技术的人,并且更容易培训人员
  2. 图书馆不太可能被放弃或变得无法使用(例如由于供应商锁定而导致的过高许可证费用),即使它确实被放弃,该库的其他用户可能已经开创了迁移路径
  3. 如果需要,更容易切换到标准的不同实现(谁能确定在软件维护的许多年中不需要这样做?)

例如,如果Red Hat陷入困境,停止免费提供hibernate的新版本,现在要求支付许可费用怎么办?或者如果Joda时间的制造商停止开发怎么办?

因此,在标准存在的地方使用标准是有意义的。牺牲一些开发便利性以限制依赖关系也可能是有意义的-值得牺牲多少是一个判断调用(将库拖入类路径中没有真正的好处。另一个极端是重新发明轮子,仅因为尚未标准化轮子。)

他们有一个项目已经7年了,仍然使用OJB作为它们的ORM......你能给我一些启示吗?
可能是因为代码通过当前没有现代实现方式的API与OJB通信,这使得更换提供者非常昂贵(甚至不可行)。也许这正是你的架构师试图通过限制你使用标准API来防止的情况。

谢谢你的解释,帮了我很多。架构师想要在所有地方使用DTO......只有实体用于持久化......你认为这是一个好方法吗?就我所看到的,使用DTO并不复杂...... - Benjamim

0

简短的一句话:

JPA - Java EE 的一部分,用于将对象(在 JPA 中称为实体)持久化/访问/更新到数据库中的 Java 规范。

Hibernate - JPA 提供者(即开源 JPA 规范实现之一)。同时请注意,您也可以在不使用 JPA 的情况下使用 Hibernate。

更多详细信息请参阅我的博客这里


0

选择JPA可能是个不错的主意 - 它将涵盖大多数你需要的东西。但我不会基于它能让ORM切换变得容易而做出决定 - 这很可能永远不会发生,即使真的发生了,首先还有很多其他事情需要担心。

如果你正在使用Hibernate作为你的JPA提供者,你总是可以在需要的地方回退到Hibernate特定的功能。


-2
Hibernate具有额外的功能,如Hibernate-Search和Envers。

1
请不要发布您认为与此相关的随意信息;我们正在寻找特定问题的具体答案。 - Andrew Barber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接