【问题标题】:Mixing EJB 2.x BMP entity beans with Hibernate 3.x将 EJB 2.x BMP 实体 bean 与 Hibernate 3.x 混合
【发布时间】:2010-09-09 06:38:59
【问题描述】:

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

我想开始迁移此应用程序以使用更具表现力、透明和非侵入性的持久性策略,鉴于我公司以前的经验,Hibernate 3.x 是显而易见的选择。

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

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

【问题讨论】:

    标签: java hibernate jakarta-ee ejb-2.x


    【解决方案1】:

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

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

    或者使用 EJB 3,它是 Hibernate 标准化到 Java Persistence API 中的。

    【讨论】:

    • 我们实际上将针对 JPA 进行编程,使用 Hibernate 作为提供者,但是因为我们不能立即迁移 100 个 BMP 实体 bean,所以关于并行运行这两种技术的问题仍然存在。
    【解决方案2】:

    正如jodonnel所说,你必须注意缓存,因为如果你在Hibernate中使用二级缓存并且在Hibernate之外修改了一个表,那么Hibernate无法知道它的缓存条目是陈旧的。

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

    【讨论】:

    • 同样适用于一级缓存(会话)
    • 如果你使用长会话是的。但实际上并不建议这样做。
    • 根据我目前有限的实验,这两种技术与我们的第三种直接 JDBC 技术一起工作得很好。即使在同一事务中使用这三种模式时,应用服务器的 TransactionManager 也确实提供了所需的行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多