将EJB 2.x BMP实体bean与Hibernate 3.x混合
时间:2020-03-05 18:54:58 来源:igfitidea点击:
我有一个使用EJB 2.x实体Bean(BMP)的大型应用程序。众所周知,这是一种可怕的持久性策略(如有必要,我可以详细说明)。
我想开始迁移此应用程序,以使用更具表现力,透明和非侵入性的持久性策略,考虑到我公司以前的经验,Hibernate 3.x是显而易见的选择。
迁移到Hibernate需要一段时间,因为应用程序中有100多个表使用实体bean。因此,我正在研究一种分阶段的方法,其中两种持久性策略并行运行,如果可能的话,最好同时在同一张表上运行。
我的问题是,将这两种持久性策略相结合的陷阱(如果有)是什么?他们会互相妨碍吗?
解决方案
回答
我想真正要小心的是与Hibernate会话一起使用。 Hibernate缓存内容,这可能会妨碍工作。
坦率地说,我建议我们采用Hibernate时,请完全删除Entity Bean。Hibernate是否在会话bean中工作,并让会话bean管理事务。
或者,也可以使用EJB 3,它是Hibernate标准化到Java Persistence API中的。
回答
正如jodonnel所说,我们必须注意缓存,因为如果在Hibernate中使用二级缓存,并且在Hibernate外部修改了表,则Hibernate无法知道其缓存项是过时的。
对于事务,它们都应使用容器提供的JTA,因此应该是安全的。