使用spring-data-jpa碰到的坑
2021/5/11 10:58:58
本文主要是介绍使用spring-data-jpa碰到的坑,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
@Override public List<CgSubject> queryByYearId(Integer yearId) { Specification<CgSubject> specification = (root, query, cb) -> { List<Predicate> predicates = new ArrayList<>(); // 所有的断言 predicates.add(cb.equal(root.get("deleted"), 0)); predicates.add(cb.equal(root.get("yearId"), yearId)); predicates.add(cb.equal(root.get("status"), 1)); return cb.and(predicates.toArray(new Predicate[0])); }; List<CgSubject> cgSubjectList = cgSubjectMapper.findAll(specification); cgSubjectList.forEach(temp -> temp.setTempName((temp.getType() == 1 ? "线上-" : "线下-") + temp.getName())); return cgSubjectList; }
另外还有一段存储的代码
@Transactional public List<CgOrder> importGroupBuyOrderExcel(List<Map<String, Object>> rowList, User creator) { List<CgOrder> cgOrderList = transform(rowList); Integer state = cgOrderList.get(0).getState(); for (CgOrder o : cgOrderList) { if (!state.equals(o.getState())) { throw new BusinessException(null, "所有订单的支付状态不统一"); } CgProduct p = o.getCgProduct(); cgProductRepository.save(p); o.setProductId(p.getId()); o.setCreateName(creator.getUserName()); cgOrderRepository.save(o); o.setOrderNo(AbstractTeacherTrainOrderService.getOrderNo(o.getId())); cgOrderRepository.save(o); } return cgOrderList; }
当然,第二段代码存储是有点问题,但不影响这个要说的这个问题,第一段代码我们通过spring jpa托管器获取到了cgSubject的列表,并对其名称进行更新,然后第二段代码中会在transform()方法中调用第一段代码,然后下面用spring jpa 进行save操作。这个时候会发现cgSubject也会被更新,原因就是用到了spring jpa托管器,在第一段代码更新name的时候相当于就会数据库的update操作,然后通过后面的save操作触发。
解决办法:
1.可以通过cgSubject实体类增加冗余字段,然后用@Transient 标注。
2.可以不使用spring jpa托管器,通过本地sql来查询cgSubject列表(未尝试,但感觉可行)。
这算是刚用spring jpa 碰到的一个坑吧,用了两个小时才发现并解决问题。
这篇关于使用spring-data-jpa碰到的坑的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)