Jose
Jose

Reputation: 1819

createNativeQuery - return Page

I have the following custom implementation of my repository.

public final EntityManager entityManager;

public ImputacionRepositoryImpl(EntityManager entityManager) {
    this.entityManager = entityManager;
}

@Override
public List<ImputacionData> imputacionesList() {
    Query q = entityManager.createNativeQuery("SELECT " + "empleado.id as empleadoId,"
            + "MAX(imputacion.dia) as dia," + "imputacion.id as id " + "FROM rrhh.empleado empleado "
            + "JOIN rrhh.imputacion imputacion ON imputacion.empleado = empleado.id "
            + "WHERE empleado.id NOT IN (SELECT empleado.id " + "FROM rrhh.empleado empleado "
            + "LEFT JOIN rrhh.imputacion imputacion ON imputacion.empleado = empleado.id " + "WHERE "
            + "(imputacion.dia >= '2017-06-01' AND imputacion.dia <= '2017-10-31') "
            + "GROUP BY empleado.id,imputacion.empleado, imputacion.id) " + "AND true=true "
            + "GROUP BY empleado.id,imputacion.empleado, imputacion.id ORDER BY imputacion.dia DESC");
    List<ImputacionData> imputaciones = q.getResultList();
    return imputaciones;
}

And I need that instead of returning a List<ImputacionData>, return Page<ImputacionData>, but I do not know if it is possible, and how to do it.

Upvotes: 1

Views: 3115

Answers (1)

newOne
newOne

Reputation: 698

So you can use page implementation in Spring, in Your case it's may look like:

    @Override
    public Page<ImputacionData> imputacionesList() {
    Query q = entityManager.createNativeQuery("SELECT " + "empleado.id as empleadoId,"
            + "MAX(imputacion.dia) as dia," + "imputacion.id as id " + "FROM rrhh.empleado empleado "
            + "JOIN rrhh.imputacion imputacion ON imputacion.empleado = empleado.id "
            + "WHERE empleado.id NOT IN (SELECT empleado.id " + "FROM rrhh.empleado empleado "
            + "LEFT JOIN rrhh.imputacion imputacion ON imputacion.empleado = empleado.id " + "WHERE "
            + "(imputacion.dia >= '2017-06-01' AND imputacion.dia <= '2017-10-31') "
            + "GROUP BY empleado.id,imputacion.empleado, imputacion.id) " + "AND true=true "
            + "GROUP BY empleado.id,imputacion.empleado, imputacion.id ORDER BY imputacion.dia DESC");
    Page<ImputacionData> page = new PageImpl<>(q.getResultList());
    return page;
}

Upvotes: 5

Related Questions