spring - 如何使用 Spring Data JPA 处理事务?

标签 spring jpa transactions transactional

我即将开始创建一个新应用程序,并希望获得有关我计划使用的方法的一些反馈。我们将使用 spring 和 spring 数据 jpa。

  • Controller 可以调用域服务和存储库,还是 Controller 应该只调用应用程序和基础设施服务?
  • 如果从 Controller 调用域服务和存储库“可以”,并且域服务操作需要事务,我可以/应该将 @Transactional 注释放在域服务方法上吗?或者我应该有一个应用程序服务来包装调用(不确定我喜欢这种方法,因为你最终会得到一堆传递方法)?
  • 如果从 Controller 调用域服务和存储库不是“确定”,我是否需要创建应用程序服务来包装所有可能的域服务调用(就像我在 2 中所说的那样,这可能是很多传递方法)?

  • 我能想出的最佳解决方案如下:
  • 存储库将具有@Transactional 注释,在写入数据库时​​需要传播,传播设置为 readOnly=true,从数据库读取时传播设置为 SUPPORTS。
  • 应用程序和域服务将根据需要添加@Transactional 注释

  • 如果 Controller 需要直接调用存储库、域服务或应用程序服务,它可以。没有穿越。

    enter image description here

    最佳答案

    你的问题我不是很清楚。域服务在做什么?我非常了解应用程序服务和域存储库。

    在 spring 中,有两层服务和数据访问层。
    服务层可以使用@Service(在您的设计中它将是应用程序服务)但不能使用@Transactional Tag。

    数据访问层使用了@Repository Tag,也使用了@Transactional Tag,因为这一层是直接连接数据库进行操作的。所以,我想知道域服务的功能是什么。我不清楚。

    谢谢哥们儿。

    关于spring - 如何使用 Spring Data JPA 处理事务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18407486/

    相关文章:

    spring - 通过扩展 SpringBeanAutowiringSupport 暴露的 Web 服务无法注入(inject) @Autowired 依赖项

    java - 在@before方法中保存状态,进行@test,然后回滚@after中的更改

    java - 事务注释不同的行为

    java - Spring hibernate jdbc 批量大小

    SQLite:是否通过回滚事务来撤消杂注语句?

    java - Spring + JAXB 集成 : Class has two properties of the same name

    spring - Primefaces <p :ajax update ="@all"/> doesn't work

    hibernate - 为父实体提取的重复关联实体

    tomcat - 部署到tomcat服务器时出现JPA错误

    c# - 事务 : C# 期间的 MSDTC 异常