【问题标题】:Can .hbm files be used in a JPA application with Hibernate as JPA provider?.hbm 文件可以在以 Hibernate 作为 JPA 提供者的 JPA 应用程序中使用吗?
【发布时间】:2011-06-25 00:39:31
【问题描述】:

我想在一个产品中用 Activiti 或 jBPM-5 替换自定义 BPM 实现,该产品使用 Hibernate(无 JPA)和 Spring 来实现持久层。不幸的是,Activiti 和 jBPM5 都需要 JPA(根据他们的文档),并且不可能将所有现有的 Hibernate 实现迁移到产品中的 JPA。

  1. 有没有办法用 Spring 3 配置 JPA 2.0(JPA 提供者是 Hibernate)而不将 Hibernate 实现迁移到 JPA(即保留 .hbm 文件)?

注意:我知道应用程序将不符合 JPA,并且无法使用其他 JPA 提供程序。

  1. 如果有办法,假设 Spring JTA 事务管理器配置了正确的设置。 应用程序逻辑和 BPM 工作流逻辑可以在单个 Spring 事务中执行吗?

【问题讨论】:

  • 这并不能完全回答您的问题,但我最近遇到了类似的情况,最终使用 HibernateTools 将我的 *.hbm.xml 文件转换为 JPA 注释 bean。它相当轻松,让我省去了完成你现在正在做的事情的努力。这是您的选择吗?
  • 谢谢@Filip Zalewski。该产品的尺寸很大。唯一的原因,我要更改为 JPA 是在同一事务中运行 BPM 和应用程序。我不认为,迁移是正确的选择。

标签: hibernate spring transactions jpa-2.0 jbpm


【解决方案1】:

关于交易见Activiti Spring Transaction Docs。如果你不能移植你的应用程序来使用 JPA,另一个选择是在你的 Hibernate 域上分层一个外观。 Activiti 允许您调用 spring 托管 bean 上的方法,因此您可以创建外观或利用现有服务层。查看 Activity 附带的示例应用程序,了解 Spring 集成的工作原理。

【讨论】:

    【解决方案2】:

    jBPM w/JPA 可以使用 Spring 与旧的非 JPA 应用程序集成。与 jBPM 的交互使用 JPA,但您的应用程序将使用休眠。唯一的缺点是您必须处理 2 个不同的事务,但大多数问题都可以得到缓解。

    1. 首先启动您的 Hibernate 事务并执行您想要的任何业务逻辑

    2. 通过调用 JBPM API 来启动您的 JBPM 事务以启动流程或发送事件等。

    3. 任何 WorkItemHandler 实现都需要使用会话工厂 API 加入外部事务

    4. 需要在每次 WorkItemHandler 执行结束时调用 Hibernate flush(),以触发业务代码生成的大多数异常

    5. WorkItemHandler 应该捕获业务代码生成的任何异常并重新抛出它,这样 JBPM 事务也会失败

    【讨论】:

      猜你喜欢
      • 2011-02-01
      • 2013-01-15
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 2012-06-28
      • 1970-01-01
      • 1970-01-01
      • 2018-05-14
      相关资源
      最近更新 更多