![]() |
1
5
服务并不总是必须是事务性的,但是当您使用JPA进行数据库工作时,事务是非常重要的,因为事务确保您的更改可以预测地提交,而不会受到其他并发工作的干扰。Spring使您的服务易于事务化,确保您理解事务,以便您可以充分利用它们。 你 在服务中使用服务,您可以设置事务传播,以便它们都使用同一事务,也可以使用单独的事务,这两种情况都有有效的情况。但我建议你不要做你在这里做的事。 服务是放置业务逻辑的地方,特别是需要事务性(全部或无事务性)的业务逻辑。根据功能将逻辑组织到服务中是有意义的,这样服务方法就是用户在某些特定部分所采取的操作。 但是为每种类型的实体提供服务并不是很有用,我建议不要这样做。一个服务可以有任意数量的存储库,您不必将每个存储库包装在自己的服务中。(教程显示特定于实体的服务,或者它们可能完全跳过服务层,这是因为它们希望向您展示框架功能,并最小化业务逻辑。但真正的应用程序往往有很多业务逻辑。) 使用实体特定服务的一个问题是:一个接一个地在控制器中调用它们意味着每个服务都使用自己的事务。创建事务的速度很慢,如果有单独的事务,可能会导致数据不一致。将业务逻辑放在一个事务中会将一致性问题的风险限制为与事务隔离级别相关的问题。
|
![]() |
2
5
控制器 理想情况下,控制器只能接受HTTP请求并提供响应。如果数据保存在数据库或文件中,或者通过另一个HTTP调用发送到另一个服务,那么控制器就不必费心。 始终让控制器远离任何业务。 服务
在您的情况下,您的控制器接收
所以最好的方法是让你的控制器直接调用
现在注册服务的工作是将数据对象转换为数据库实体并将它们保存在事务中。
我更喜欢把问题分开。 e、 g只有AccountsService才应该知道Accounts存储库的输入和输出。帐户服务应该充当处理帐户的中间人。你想保存它吗?把它给我。你想找到它吗?我会帮你找到的。
|
![]() |
TheCrunchyPotato · JPA查询找不到正确的构造函数 2 年前 |
![]() |
Maiko Kingma · hibernate何时加载映射关系 6 年前 |
![]() |
OOvic · 使用JoinTable实现多个关系中的JPQL查询 6 年前 |
![]() |
Jovan0042 · 在H2中持久化多个实体引发异常 6 年前 |
![]() |
Nemeth Attila · 如何编写多对多关联表的查询 6 年前 |