Criteria Generico para usar PROJECTION
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
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
Curtidas 0
Respostas
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
@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