title: Spring - @Transactional across multiple services and repositories
body: <p>I am building an application with Spring Boot v2.1.3.RELEASE and Hibernate v5.3.6.</p>
  
  <p>What I wish to accomplish is using the @Transactional annotation on my services to ensure that when deleting a record, if an error occurs, either database or business logic exception, that any deleted records from the transaction are rolled back to its original state before the delete began.</p>
  
  <p>The service where I want the transaction to begin is <code>MasterSpecService</code> and call the other services like so: </p>
  
  <pre><code>deleteMasterSpec(MasterSpec masterSpec) {
       this.approvalTargetService.deleteApprovalTargetsForSpec(masterSpec.getSysI());
       this.approvalToleranceService.deleteApprovalTolerancesForSpec(masterSpec.getSysI());
       this.receivingToleranceService.deleteReceivingTolerancesForSpec(masterSpec.getSysI());
       this.finishedGoodTargetService.deleteFinishedGoodTargetsForSpec(masterSpec.getSysI());
       this.finishedGoodToleranceService.deleteFinishedGoodTolerancesForSpec(masterSpec.getSysI());
       this.maxValueService.deleteMaxValuesForSpec(masterSpec.getSysI());
       this.ingredientService.deleteSpecIngredients(masterSpec.getSysI());
       this.masterSpecRepo.deleteById(masterSpec.getSysI()); 
       // throw some exception here as a test, and have all the deletes rollback
  }
  </code></pre>
  
  <p>In the database, tables for targets, tolerances, max values and ingredients all have foreign key references to the MasterSpec table, so I delete the MasterSpec last.</p>
  
  <p>I want the <code>MasterSpecService</code> to be the main Transaction, and have all other services attach themselves to that transaction, so if anything fails it will revert. All services have their own JPA Repository handling the deletes.</p>
  
  <p>Is this possible to accomplish with the @Transactional annotation?</p>
  
  <p>Or, will using @OneToMany and @ManyToOne mappings inside my various Entity classes accomplish the same task and revert any deleted records should any part of the transaction fail when I call delete on the MasterSpec record?,</p>