Criteria Generico para usar PROJECTION

Java

19/04/2012

Segue meu DAO GENERICO

public abstract class GenericDAO<T, ID extends Serializable> {

private Class<T> persistentClass;

//seus outros métodos genéricos

protected List<T> findByCriteria(Criterion... criterion) {
Criteria crit = getSession().createCriteria(getPersistentClass());
for (Criterion c : criterion) {
crit.add(c);
}
return crit.list();
}

public GenericDAO() {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}

public Class<T> getPersistentClass() {
return persistentClass;
}
}

Minha funcao que chama o DAO generico

Criteria criteria = (Criteria) documentoVersaoDao.buscaUmPeloCriterio(Restrictions.eq(documentoVersaoPK.idDocumento);



Alguem poderia me dizer como usar PROJECTION.MAX no meu caso? Estou tentando mas com meu DAO generico n esta dando.
Aguardo resposta
Andrei Hirata

Andrei Hirata

Curtidas 0

Respostas

Davi Costa

Davi Costa

19/04/2012

Andrei, a estratégia que eu gosto de usar é chamar meu Criteria genérico e se necessário for usar projeção sobrescrevo esse método para quem precisa, mas mesmo na sobrescrição eu chamo o método genérico, segue abaixo um exemplo:
@Override
protected Criteria createCriteriaExample(OrdemProducaoTarefa ordemProducaoTarefa, boolean ordenar) {
//chamado ao criteria genérico
Criteria criteria = super.createCriteriaExample(ordemProducaoTarefa, MatchMode.ANYWHERE);
if (ordenar) {
criteria.addOrder(Property.forName(id).asc());
}

if (ordemProducaoTarefa.getOrdemProducao() != null) {
Criteria criteriaOrdemProducao = criteria.createCriteria(ordemProducao);
criteriaOrdemProducao.add(Restrictions.eq(id, ordemProducaoTarefa.getOrdemProducao().getId()));
}

ProjectionList projectionList = Projections.projectionList();
projectionList.add(Projections.distinct(Projections.property(id)));
projectionList.add(Projections.property(ordemProducao),ordemProducao);
projectionList.add(Projections.property(cliente),cliente);
projectionList.add(Projections.property(codigoOPT),codigoOPT);
projectionList.add(Projections.property(tarefa),tarefa);
projectionList.add(Projections.property(dataInicio),dataInicio);
projectionList.add(Projections.property(dataFinal),dataFinal);
projectionList.add(Projections.property(dataRecebimento),dataRecebimento);
projectionList.add(Projections.property(observacao),observacao);
projectionList.add(Projections.property(situacao),situacao);
projectionList.add(Projections.property(valor),valor);
projectionList.add(Projections.property(processosOrdensTarefas),processosOrdensTarefas);
projectionList.add(Projections.property(processoWorkFlow),processoWorkFlow);
projectionList.add(Projections.property(arquivo),arquivo);
projectionList.add(Projections.property(quantidade),quantidade);
criteria.setProjection(projectionList);

criteria.setResultTransformer(new AliasToBeanResultTransformer(OrdemProducaoTarefa.class));

return criteria;

}

Espero que possa ajudar

att Davi
GOSTEI 0
POSTAR