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;
https://stackoverflow.com/questions/65930226/querydsl-cant-get-data-immediately-after-jpa-insert January 28, 2021 at 10:32AM
没有评论:
发表评论