I have a java method with insert and select like that:
@Override
public Page<ApprovalProcessEntity> getApprovalProcess(int page, int size, String approvalNum, String approvalType, int approvalStatus, Date start, Date end) {
//jpa inseart
checkAndInsertApprovalProcess();
//querydsl select
return getApprovalProcess2(page, size, approvalNum, approvalType, approvalStatus, start, end);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void checkAndInsertApprovalProcess() {
List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned(curUserId()).list();
String confirmVar = "IS_CONFIRM";
List<ApprovalProcessEntity> entities = new ArrayList<>();
Set<String> processInstanceIds = new HashSet<>();
for (Task task : list) {
processInstanceIds.add(task.getProcessInstanceId());
}
Map<String, ApprovalApplyEntity> map = approvalApplyDao.findAllByProcessInstanceIdIn(processInstanceIds).stream().collect(Collectors.toMap(ApprovalApplyEntity::getProcessInstanceId, k -> k));
for (Task task : list) {
Object confirm = taskService.getVariable(task.getId(), confirmVar);
if (confirm != null) {
continue;
}
taskService.setVariable(task.getId(), confirmVar, true);
ApprovalProcessEntity entity = new ApprovalProcessEntity();
String processInstanceId = task.getProcessInstanceId();
ApprovalApplyEntity apply = map.get(processInstanceId);
entity.setApprovalStatus(1);
entity.setCurNode(task.getName());
entities.add(entity);
}
approvalProcessDao.saveAll(entities);
}
Page<ApprovalProcessEntity> getApprovalProcess2(int page, int size, String approvalNum, String approvalType, int approvalStatus, Date start, Date end) {
String userId = curUserId();
QApprovalProcessEntity qEntity = QApprovalProcessEntity.approvalProcessEntity;
JPAQuery<ApprovalProcessEntity> jpaQuery = queryFactory
.selectFrom(qEntity)
.where(qEntity.createTime.between(start, end))
.where(qEntity.createPerson.eq(userId));
if (StrUtil.isNotBlank(approvalNum)) {
jpaQuery = jpaQuery.where(qEntity.approvalNum.eq(approvalNum));
}
if (StrUtil.isNotBlank(approvalType)) {
jpaQuery = jpaQuery.where(qEntity.approvalType.eq(approvalType));
}
if (approvalStatus != -1) {
jpaQuery = jpaQuery.where(qEntity.approvalStatus.eq(approvalStatus));
}
PageRequest pr = PageRequest.of(page, size);
List<ApprovalProcessEntity> entities = jpaQuery.offset(pr.getOffset()).limit(pr.getPageSize()).fetch();
return new PageImpl<>(entities, pr, jpaQuery.fetchCount());
}
if some task haven't be confirmed,insert a new entity in to table;
then select data from this table; if I use the following code, when I had a new task, it can insert successfully, but can't select data immediately,
if call getApprovalProcess() again, getApprovalProcess2() method work well, so how can I select data immediately after insert; meanwhile, if i change getApprovalProcess2() like:
Page<ApprovalProcessEntity> getApprovalProcess2(int page, int size, String approvalNum, String approvalType, int approvalStatus, Date start, Date end) {
return approvalProcessDao.findAll(PageRequest.of(page, size));
}
then create a new task and call getApprovalProcess() method again() it can select data immediately, work well but actually what I want is Previous Impl,so what should I do that can make it work;