Jpa插入后querydsl无法立即获取数据

问题描述

我有一个带有插入和选择的java方法

    @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,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());
    }

如果某些任务没有被确认,则在表中插入一个新实体;

然后从这个表中选择数据; 如果我使用以下代码, 当我有一个新任务时,它可以成功插入, 但不能立即选择数据,

如果再次调用 getApprovalProcess()getApprovalProcess2() 方法运行良好, 那么如何在插入后立即选择数据; 同时,如果我改变 getApprovalProcess2() 像:

    Page<ApprovalProcessEntity> getApprovalProcess2(int page,Date end) {
        return approvalProcessDao.findAll(PageRequest.of(page,size));
    }

然后创建一个新任务并再次调用getApprovalProcess()方法() 它可以立即选择数据,效果很好 但实际上我想要的是PrevIoUs Impl,所以我应该怎么做才能使它起作用;

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...