迟到的回答,但我认为这个问题可能与其他人有关,而答案可能比看上去更复杂。
我认为只有100%的标准JPA使用率。有些差异可能至关重要。 E.g:
- 默认情况下,Hibernate不会缓存。默认情况下,EclipseLink会大量缓存。您必须检查两者如何迁移缓存的文档。
- 默认情况下,Hibernate甚至可以在Java SE环境中查找(扫描)类,EclipseLink也不会这样做。两者都按照规定在EE环境中进行。
- 两个提供程序中都存在错误,即使使用100%JPA,您也可能会定期搜索,具体取决于映射的复杂程度,是否以及如何使用JPQL等。我们的实践示例:
- Hibernate不会为连接中的删除生成正确的SQL,例如:
delete from Dog d where d.breed.name = 'collie'
(link)
- 或者更具异国情调的EclipseLink删除实体
@OneToMany
引用非@Id
属性(link)
- 作为另一个例子,虽然现在已经修复,但EclipseLink中的惰性列表上的Java 8流也存在问题,因为它们误用了
Vector
(扩展了一个而没有维护超类'受保护字段'不变量)。 / LI>
考虑到两个项目中打开了多少错误(这本身可能是预期的),当您尝试来回迁移时,可能会遇到错误交叉错误。
所以要把它包起来:
- 介意JPA提供程序细节,其中JPA规范不是,具体而言(有许多未指定的行为留给提供者)。隐式缓存设置就是一个例子。您需要阅读JPA提供程序文档以使用提供程序的适当属性等。
- 记住错误。 : - )
简短回答。这取决于。
答案很长。如果您使用100%标准JPA,或者如果直接使用Hibernate API,则必须重写所有内容,这可能是微不足道的。
最佳答案。如果您使用JPA,这将是非平凡的,但不是一个令人发指的时间承诺。