[英]How to persist/commit entity to database immediately in Activiti Service Task
我需要在調用save(或saveAndFlush)代碼時立即將實體持久化(插入)到數據庫中。
但是,盡管實體是在上下文中創建的,但它不會立即保留在數據庫中。
我們正在使用Spring Boot。
public interface MessageRepository extends JpaRepository<MessageEntity, Long> {
}
在服務類中
@Service
public class TestService {
@Autowired
private MessageRepository messageRepository;
@Transactional
public MessageEntity saveMessage(MessageEntity entity) throws Exception {
entity = messageRepository.saveAndFlush(entity);
return entity;
}
}
盡管創建了實體,但不會立即將其持久化/提交給數據庫。
我們僅在Activiti任務中面臨此問題。
任何反饋將不勝感激。
這工作了。
@Component
public class MessageRepositoryCustomImpl implements MessageRepositoryCustom {
@PersistenceContext
EntityManager entityManager;
@Override
@Transactional(propagation = Propagation.REQUIRES_NEW)
public MessageEntity saveImmediate(MessageEntity entity) {
entityManager.persist(entity);
return entity;
}
}
解決這種情況的一種方法是利用REQUIRES_NEW事務屬性。
根據您的情況,您必須創建一個新的存儲庫:
public interface MessageRepositoryCustom{
void saveAndFLush(MessageEntity ent);
}
public MessageRepositoryCustomImpl implements MessageRepositoryCustom{
@Autowired
private SessionFactory sessionFactory;
@Transactional(propagation = Propagation.REQUIRES_NEW)
void saveAndFLush(MessageEntity ent){
Session session = sessionFactory.getCurrentSession();
session.persist(ent);
}
}
然后在您的服務中,您將使用該存儲庫:
@Transactional
public MessageEntity saveMessage(MessageEntity entity) throws Exception {
entity = messageRepositoryCutom.saveAndFlush(entity);
// other processing
return entity;
}
}
現在,在messageRepositoryCutom.saveAndFlush
方法完成處理后,由於實體是在已提交的單獨事務中創建的,因此實體將物理保留在數據庫中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.