JPA:使用服务和多个存储库的正确方法
我制作了一个使用JPA和Spring的系统。例如,如果我需要处理帐户,我会使用存储库:
@Repository
public interface AccountRepository extends JpaRepository<Account, Long>
然后,我创建一个使用存储库的服务:
class AccountServiceImpl implements AccountService {
@Autowired
private AccountRepository repository;
@Transactional
public Account save(Account account){
return repository.save(account);
}
...
现在,我已经创建了一个控制器来处理帐户的 POST 方法:
@Controller
public class AccountController {
@Autowired
private final accountService service;
@RequestMapping(value = "/account", method = RequestMethod.POST)
public ModelAndView account(@Valid Account account, BindingResult bindingResult) {
...
service.save(account);
客户,产品,联系人等也是如此。
现在,假设我还有一个名为“注册”的类,其中包含足够的数据来创建客户,包括他的帐户,联系人数据和产品(大量数据)。“确认”注册的操作是专门用于执行此操作的操作:
@RequestMapping(value = "/confirm", method = RequestMethod.POST)
public ModelAndView confirmRegistration(@Valid Registration registration, BindingResult bindingResult) {
现在我的问题:为每个存储库调用 save 方法的正确方法是什么?
1)我应该在控制器中创建类,然后为每个创建的类调用save方法:
@RequestMapping(value = "/confirm", method = RequestMethod.POST)
public ModelAndView confirmRegistration(@Valid Registration registration, BindingResult bindingResult) {
...
customerService.save(customer);
accountService.save(account);
contactDataService.save(contactData);
productService.save(contactData);
...
2) 调用注册服务中每个服务的保存:
class RegistrationServiceImpl implements RegistrationService {
@Autowired
private AccountService accountService;
@Autowired
private CustomerService customerService;
....
@Transactional
public void confirm(Registration registration){
... here I create the object
customerService.save(customer);
accountService.save(account);
}
3) 调用注册服务中每个存储库的保存:
class RegistrationServiceImpl implements RegistrationService {
@Autowired
private AccountRepository accountRepository;
@Autowired
private CustomerRepository customerRepository;
....
@Transactional
public void confirm(Registration registration){
... here I create the object
customerRepository.save(customer);
accountRepository.save(account);
}
如果我必须使用(1),我明白了。但对选项(2)和(3)感到困惑。
问题再次出现:
我应该/是否可以在服务中使用其他服务?或者我必须在服务中仅使用存储库?
谷歌对此的解释的正确方法是什么?对不起,英语不是我的母语,我找不到正确的方法来询问这种设计。