我编写了具有一些基本编辑器功能的Angular + Spring Web应用程序。在后端,我已经创建了用于处理草稿的功能。因此,基本上,用户在完成工作后首先创建草稿,编辑内容,保存草稿并将其发布。因此,在我的“业务”层中,我创建了一个接口DraftManagement,其中在实现中的所有公共方法都用@Transactional注解:
public interface DraftManagement {
DraftCto findDraft(...);
DraftCto createDraft(...);
void deleteDraft(...);
void publishDraft(...);
到目前为止,一切都很好。一切正常。但是现在我有了从.properties文件上载文本的新要求。所以我想我可以重用现有的草案功能。步骤将包括:
我希望它在跨越以上所有步骤的事务中运行,因此我在单独的用例类中创建了方法:
public class UcUploadProperties {
@Inject
private DraftManagement draftManagement;
@Transactional
@Override
public void uploadProperties(...) {
...
final DraftCto existingDraft = this.draftManagement.findDraft(...);
if (Objects.nonNull(existingDraft)){
this.draftManagement.deleteDraft(...);
}
DraftCto freshDraft = this.draftManagement.createDraft(...);
...
this.draftManagement.saveText(...);
this.draftManagement.publishDraft(...);
}
现在我有两个问题:
如果我在uploadProperties方法上删除@Transactional,则代码将按预期运行,但不会在全局事务中运行。因此,我想征询有关如何处理此类用例的建议,在这种情况下,必须删除同一对象并在同一事务中重新创建该对象?