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;
}
0 nhận xét:
Đăng nhận xét