JPA findAll分页查询连表查询
实体类TaskWorkEntity@Entity@Data@Accessors(chain = true)@Table(name = "task_work")public class TaskWorkEntity extends BaseEntity {private Long id;// EcTaskEntity 关联关系 唯一字段private String ecTaskSerial;priv
·
实体类TaskWorkEntity
@Entity
@Data
@Accessors(chain = true)
@Table(name = "task_work")
public class TaskWorkEntity extends BaseEntity {
private Long id;
// EcTaskEntity 关联关系 唯一字段
private String ecTaskSerial;
private String taskWorkName;
/**
* 当使用JPA配置实体时,如果有两个属性(一个是一般属性,一个是多对一的属性)映射到数据库的同一列,就会报错。
* 这时,在多对一的@JoinColumn注解中添加insertable = false, updatable = false就能解决。
*/
@ManyToOne
@JoinColumn(name = "ecTaskSerial", insertable = false, updatable = false)
private EcTaskEntity ecTaskEntity;
}
实体类EcTaskEntity
@Entity
@Data
@Accessors(chain = true)
@Table(name = "ec_task")
public class EcTaskEntity extends BaseEntity {
private String serial;
private String ecTaskName;
}
关联关系EcTaskEntity一对多TaskWorkEntity
下面是分页查询
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
Page<TaskWorkEntity> page;
Sort sort = Sort.by(Sort.Direction.DESC, "createTime");
Pageable pageable = PageRequest.of(currentPage , pageSize, sort);
PageResultModel pageModel = new PageResultModel();
try {
page = taskWorkRepository.findAll((root, query, cb) -> {
List<Predicate> predicates = new ArrayList();
if (StringUtils.isNotBlank(status)) {
Join<EcTaskEntity, TaskWorkEntity> join = root.join("ecTaskEntity", JoinType.LEFT);
predicates.add(cb.equal(join.get("status"), status));
}
if (StringUtils.isNotBlank(serial)) {
predicates.add(cb.like(root.get("serial"), "%" + serial + "%"));
}
predicates.add(cb.equal(root.get("isDelete"), 0));
Predicate[] arrayPredicates = new Predicate[predicates.size()];
return cb.and(predicates.toArray(arrayPredicates));
}, pageable);
} catch (Exception e) { }
更多推荐
已为社区贡献1条内容
所有评论(0)