Java 在Spring/Hibernate环境中手动管理数据库事务

Java 在Spring/Hibernate环境中手动管理数据库事务,java,database,hibernate,spring,transactions,Java,Database,Hibernate,Spring,Transactions,我们有一个基于Spring的web应用程序,它利用Hibernate将其实体加载/存储到底层数据库 由于它是一个后端应用程序,我们不仅希望允许我们的UI,而且还希望第三方工具手动启动DB事务。这就是为什么打电话的人需要 调用StartTransaction方法,作为回报,获取他们可以引用的ID 通过引用此ID执行所有与数据库相关的调用(例如创建、修改、删除),以明确哪些操作属于已启动的事务 调用CommitTransaction方法向后端发出信号,表示现在可以提交事务(或者在否定的情况下,将调用

我们有一个基于Spring的web应用程序,它利用Hibernate将其实体加载/存储到底层数据库

由于它是一个后端应用程序,我们不仅希望允许我们的UI,而且还希望第三方工具手动启动DB事务。这就是为什么打电话的人需要

  • 调用
    StartTransaction
    方法,作为回报,获取他们可以引用的ID
  • 通过引用此ID执行所有与数据库相关的调用(例如创建、修改、删除),以明确哪些操作属于已启动的事务
  • 调用
    CommitTransaction
    方法向后端发出信号,表示现在可以提交事务(或者在否定的情况下,将调用
    RollbackTransaction

  • 请记住,所有数据库处理都将由Java持久性注释在内部完成,我们如何才能将事务管理打开到我们的UI,该UI的行为类似于第三方应用程序,该应用程序无法直接访问后端实体,但只处理数据传输对象?

    为什么不围绕“后端应用程序”构建服务,例如SOAP接口或REST接口


    使用此策略,您可以在后端管理事务,参见Spring参考:

    我认为这是可以做到的,但实施/验证起来会非常困难。您基本上需要一个事务管理器,它不受“每线程事务”定义的限制,而是跨越同一客户机的多个调用


    JTA+有状态会话bean可能是您想要了解的东西。

    也许我没有充分澄清我的问题:关键不是要提供哪个接口,而是如何让Hibernate为我提供手动启动和结束事务的可能性。通常这都是通过注释和配置完成的,但是我们的第三方工具和UI无法访问这些注释实体。相反,它们传递DTO(仅限数据传输对象)。当然欢迎您。顺便说一句,如果你成功实现了这一点,这个社区会对你采取的方法感兴趣,因此如果你完成了你的实现后可以更新你原来的帖子或对这篇帖子发表评论,那就太好了。祝你好运