gpt4 book ai didi

spring - JPA 事务未在方法结束时提交

转载 作者:行者123 更新时间:2023-12-05 07:49:42 25 4
gpt4 key购买 nike

我有两种方法:

1:
@Transactional
public Long add(Long clientId) {
Contact contact = new Contact();
contact.setClientId(clientId);
contact.setValue('test@test.com');
contact.setType('EMAIL');
contact.setDateStart(new Date());
// autowired repo
return contactRepository.saveAndFlush(contact);
}

2:
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void emailsValidator(Long clientId) {
Specification<Client> spec = ClientSearchSpecification.getByClientIdWithActiveEmails(clientId);
List<Client> clientList = clientRepository.findAll(spec);
}

SearchSpecification:
public static Specification<Client> getByClientIdWithActiveEmails(Long clientId) {
return (root, query, cb) -> {
query.distinct(true);
Join<Client, Contact> clientContactJoin = (Join) root.fetch(Client_.contactList);
List<Predicate> predicates = new ArrayList<>();
predicates.add(cb.equal(root.get(AbstractEntity_.id), clientId));
predicates.add(cb.equal(clientContaktJoin.get(Contakt_.type), 'EMAIL'));
predicates.add(cb.lessThan(clientContaktJoin.get(Contakt_.dateStart), cb.currentTimestamp()));
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
}

主要方法:

@RequestMapping(value = "/{clientId}/contact/add", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public void addContact(@PathVariable(value = "clientId") Long clientId) {
contactService.add(clientId);
errorValidationService.emailsValidator(clientId);
}

我的数据库属性:

hibernate.transaction.auto_close_session: true
hibernate.connection.autocommit: true
org.hibernate.flushMode: COMMIT

问题 - 数据库在执行步骤 2 时不包含来自步骤 1 的新实体。对象仅在所有 rest 调用完成后提交。我如何在步骤 1 中提交实体,以便我可以在步骤 2 中选择并加入它?

最佳答案

您无需 promise 选择您的数据(在同一交易中)。

这里的问题是您说过第 2 步需要`NOT_SUPPORTED,这意味着第 1 步必须在第 2 步可以看到它插入的任何数据之前提交。

尝试将第 1 步的传播更改为 REQUIRES_NEW,以确保在进入第 2 步之前发生提交。

关于spring - JPA 事务未在方法结束时提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37031008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com