lazy=true时,如何自动注入关联属性
例子1 DeaprtEntity EmployeeEntity 举例说明
DeaprtEntity EmployeeEntity 1:n
@Transactional public DepartEtity getDepartById(int id) { // 1. touch相关懒加载字段 DepartEntity depart= departRepository.findOne(id); Hibernate.initialize(depart.getEmployeeEntityList()); // 2. 直接修改加载模式 // DepartEntity depart = departRepository.getById(id); // List<EmployeeEntity> employeeList = depart.getEmployeeEntityList(); // if (null != employeeList && employeeList .size()>0){ // employeeList .get(0); // } return depart; }
例子2 CompanyEntity DeaprtEntity EmployeeEntity 举例说明
CompanyEntity DeaprtEntity 1:n
DeaprtEntity EmployeeEntity 1:n
EmployeeEntity设置为lazy,返回结果DepoyEntity中自动注入employeeList
@Transactional @Override public Page<DepartEntity> getSoundSourceEntityList(final Integer companyId, final String name, Pageable page) { Page<DepartEntity> result = departRepository.findAll(new Specification<DepartEntity>() { @Override public Predicate toPredicate(Root<DepartEntity> root, CriteriaQuery<?> query, CriteriaBuilder cb) { // TODO: 优化 Predicate conjunction = cb.conjunction(); // 判断非count(1)查询,设置连接 if (query.getResultType() == Depart.class) root.fetch("employeeList", JoinType.LEFT); if (companyId != null) { conjunction = cb.and(conjunction, cb.isMember(companyId , root.<Collection<Integer>>get("companyEntities"))); } if (!StringUtils.isEmpty(name)) { conjunction = cb.like(root.get("name"), "%" + name + "%"); } query.where(conjunction); query.orderBy(cb.desc(root.get("createTime").as(Timestamp.class))); return query.getRestriction(); } }, page); return result; }