boa tarde,
eu gostaria de fazer uma busca na tabela e retornar apenas um campo (DISTINCT(campo), mas não estou conseguindo o mais perto que cheguei foi assim:
public List<Holerite> listaEntidade() {
String sql = "SELECT DISTINCT tbl FROM Holerite tbl"
+ " WHERE tbl.cpf = :cpf"
+ " GROUP BY tbl.holeritePK.entidade";
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("cpf", UsuarioControle.usuarioLogado.getCpf().replaceAll("[\\.|\\-]", ""));
return super.listaTodos(sql, parametros, 0);
}
public List<T> listaTodos(String sql, Map<String, Object> parametros, Integer limite) {
List<T> lista = null;
try {
Query query = emCadastro.createQuery(sql);
if (parametros != null && !parametros.isEmpty()) {
queryParametros(query, parametros);
}
if (limite > 0) {
query.setMaxResults(limite);
}
lista = query.getResultList();
} catch (Exception e) {
e.getMessage();
}
return lista;
}
eu quero retornar esses valores em um selectOneMenu teria alguma forma melhor de fazer isso pois da maneira que esta nao funciona ele traz varias vezes o mesmo registro
Por favor, ao postar tópicos, NÃO DEIXE O TÍTULO INTEIRO EM LETRAS MAIÚSCULAS.
E o que ele deveria fazer com os demais dados?
Por exemplo, digamos que ele retorne:
Nome: Fulano de Tal Cpf: 12345 Holerite: 09/2012
Nome: Fulano de Tal Cpf: 12345 Holerite: 10/2012
E o distinct seja sobre o CPF. O que deveria acontecer com o campo do holerite?
eu queria trazer em um SelectOneMenu apenas um campo para depois filtrar em um dataTable e mostrar apenas os dados de direito da pessoa, sendo que ela poderia nesse caso com o filtro visualizar holerites de outras competencia
Então faz o SELECT em um campo só, ué. Se você só precisa do CPF
E o resto fica igual.
mas quando eu troco meu sql ele da erro
/servidor/holerite.xhtml @27,138 itemValue="#{entidade.holeritePK.entidade}": The class ‘java.lang.String’ does not have the property ‘holeritePK’.
public List<Holerite> listaEntidade() {
String sql = "SELECT DISTINCT(tbl.holeritePK.entidade) FROM Holerite tbl"
+ " WHERE tbl.cpf = :cpf";
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("cpf", UsuarioControle.usuarioLogado.getCpf().replaceAll("[\\.|\\-]", ""));
return super.listaTodos(sql, parametros, 0);
}
eu precisaria criar um List para jogar somente este campo?
Consegui resolver da seguinte forma:
public List<SelectItem> listaEntidade() {
String sql = "SELECT DISTINCT(tbl.holeritePK.entidade) AS entidade FROM Holerite tbl"
+ " WHERE tbl.cpf = :cpf";
Map<String, Object> parametros = new HashMap<String, Object>();
parametros.put("cpf", UsuarioControle.usuarioLogado.getCpf().replaceAll("[\\.|\\-]", ""));
return super.listaFiltro(sql, parametros, 0);
}