This solution is ideal if you have a list of entities or a named queries that return a list of entities. For example let's say we have a...
This solution is ideal if you have a list of entities or a named queries that return a list of entities.
For example let's say we have an entity user and we want to return all the users with role=x.
Then we need to extend primefaces's LazyDataModel class, overriding the size method.
For example let's say we have an entity user and we want to return all the users with role=x.
@NamedQueries({ @NamedQuery(name = "User.listUsersByRoles", query = ""
+ "SELECT u FROM User u"
+ " LEFT JOIN u.roles as role"
+ " WHERE role.name IN (:roleNames)) })
public class User implents Serializeable {
}
Then we need to extend primefaces's LazyDataModel class, overriding the size method.
import org.primefaces.model.LazyDataModel;Next we need a service that will call the native query:
public class LazyDataModelWSizeextends LazyDataModel {
private static final long serialVersionUID = -20655217804181429L;
public Integer size() {
return getRowCount();
}
}
public ListAnd finally a bean that will call the service. Let's say we want to query all the users with role admin and hr.listUsersByRoleList roleNames) {
Listusers = null;
try {
users = entityManager.createNamedQuery("User.listUsersByRoles").setParameter("roleNames", roleNames).getResultList();
} catch (Exception e) {
log.error("null {}", e.getMessage());
}
return users;
}
private LazyDataModelfilteredUsers = null;
public LazyDataModelgetFilteredLazyDataModel() {
if (filteredUsers != null) {
return filteredUsers;
}
filteredUsers = new LazyDataModelWSize() {
private static final long serialVersionUID = 1L;
@Override
public Listload(int first, int pageSize, String sortField, SortOrder sortOrder, Map loadingFilters) {
Listentities = null;
entities = userService.listUsersByRoles(Arrays.asList("ADMIN", "HR"));
setRowCount(entities.size());
return entities.subList(first, (first + pageSize) > entities.size() ? entities.size() : (first + pageSize));
}
};
return filteredUsers;
}
COMMENTS