簡體   English   中英

如何在Activiti服務任務中將實體立即保存/提交到數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM