Java 混合EJB2.xBMP实体bean和Hibernate3.x

Java 混合EJB2.xBMP实体bean和Hibernate3.x,java,hibernate,jakarta-ee,ejb-2.x,Java,Hibernate,Jakarta Ee,Ejb 2.x,我有一个使用EJB2.x实体bean(BMP)的大型应用程序。众所周知,这是一种可怕的持久性策略(如有必要,我可以详细说明) 我想开始迁移这个应用程序,以使用一种更具表现力、更透明、更非侵入性的持久化策略,考虑到我的公司以前使用它的经验,Hibernate 3.x是一个明显的选择 迁移到Hibernate需要一段时间,因为应用程序中有100多个表使用实体bean。因此,我正在研究一种分阶段的方法,其中两种持久性策略并行运行,如果可能的话,最好同时在相同的表上运行 我的问题是,结合这两种持久性策略

我有一个使用EJB2.x实体bean(BMP)的大型应用程序。众所周知,这是一种可怕的持久性策略(如有必要,我可以详细说明)

我想开始迁移这个应用程序,以使用一种更具表现力、更透明、更非侵入性的持久化策略,考虑到我的公司以前使用它的经验,Hibernate 3.x是一个明显的选择

迁移到Hibernate需要一段时间,因为应用程序中有100多个表使用实体bean。因此,我正在研究一种分阶段的方法,其中两种持久性策略并行运行,如果可能的话,最好同时在相同的表上运行


我的问题是,结合这两种持久性策略会有什么陷阱(如果有的话)?他们会互相妨碍吗?

我想真正要小心的是使用Hibernate会话。Hibernate会缓存东西,这可能会造成阻碍

坦率地说,我建议如果您采用Hibernate,就完全放弃实体bean。在会话bean中执行Hibernate工作,并让会话bean管理事务


或者交替使用EJB3,它被Hibernate标准化为Java持久性API。

正如jodonnel所说,您必须注意缓存,因为如果您在Hibernate中使用二级缓存,并且在Hibernate之外修改了一个表,那么Hibernate就无法知道其缓存项已过时


对于事务,它们都应该使用容器提供的JTA,因此它应该是安全的。

如果使用长会话,同样适用于一级缓存(会话)。根据我目前为止有限的实验,这两种技术与我们的第三种直接JDBC技术并排工作,令人愉快。应用服务器的TransactionManager确实提供了所需的行为,即使在同一事务中使用了这三种模式。我们实际上将针对JPA进行编程,以Hibernate作为提供程序,但因为我们无法立即迁移100个BMP实体bean,关于并行运行这两种技术的问题仍然存在。