Consultar os "N" objetos mais recentes

5 respostas
khichfy

Alguem poderia indicar um caminho de como poderia ser feito uma consulta que retorna as “N” tuplas mais recentes?
o usuario deve fornecer o “N”…

to usando hibernate…

enquanto isso, vou pesquisando

obrigado

5 Respostas

khichfy

eu poderia fazer com bacalhau…

public List<ObjectQualquer> findByDate(Date date, int n) {
			List<ObjectQualquer> a = getHibernateTemplate()
					.find("from ObjectQualquer n where trunc(n.date) = trunc(?) order by n.date desc",date);

                       // e depois eu fazia um for com o parametro "n" 
		
	}

mas procuro outra forma de fazer… queria ir no banco e trazer so os “n” elementos… e não todo mundo pra depois pegar os “n”…

rissato

tem uma clausula sql “limit” que serve pra isso…
mas nao sei se existe em todos os bancos…

J

khichfy,

Você pode utilizar Criteria para fazer isso:

Criteria criteria = session.createCriteria(SuaClasse.class).addOrder(Order.desc("DATA"));
criteria = filter.execute(criteria);
criteria = sort.execute(criteria);
criteria.setFirstResult(rowStart);
criteria.setMaxResults(rowEnd);
return criteria.list();

Abraço.

khichfy

Bacana… eu tava vendo o Criteria, mas estava longe de ver uma solução…
pois estava tentando entender uns metodos como

public static Criterion sizeEq(String propertyName,int size)

public static Criterion sizeNe(String propertyName,int size)

quando vi sua dica, tentei e estou tentando coloca-la para funcionar…

mas quem é filter e sort… ?
de onde eles vem ? :shock: :oops:

valeu

khichfy

na verdade minha classe que contem o metodo resposalvel para realizar a consulta extend de HibernateDaoSupport que por sua vez extends de org.springframework.dao.support.DaoSuppor

então seguindo o padrão do projeto aqui eu uso DetachedCriteria e não Criteria…

public class HibernateNewsDAO extends HibernateDaoSupport implements NewsDAO {
.
.
.
public List<News> findRecents(int n) {
		DetachedCriteria criteria = DetachedCriteria.forClass(News.class).addOrder(Order.desc("DATA"));;
		criteria = filter.execute(criteria);
		criteria = sort.execute(criteria);  
		criteria.setFirstResult(rowStart);  
		criteria.setMaxResults(rowEnd);  
		return criteria.list();  
}
.
.
.
}

agora estou tentando entender quem é filter e sort…

Criado 9 de março de 2009
Ultima resposta 9 de mar. de 2009
Respostas 5
Participantes 3