Olá pessoal, td bem??
É o seguinte: quero montar uma criteria mais ou menos assim:
@SuppressWarnings("unchecked")
public List<Respostas> getRespostasByPergunta(Long id) {
Criteria c = session.createCriteria(Respostas.class);
List<Respostas> results = c.createCriteria("pergunta").add(
Restrictions.eq("cod_pergunta", id)).list();
return results;
}
Só que na verdade, eu quero que através dessa criteria, me sejam exibidas apenas os itens que tem o relacionamento com o item X, ou seja:
Em se falando de perguntas e respostas, digamos que eu queira que me sejam exibidas apenas as respostas referentes a pergunta 1, entenderam??
Como tenho muito pouco conhecimento de criteria, gostaria de uma ajuda, se possível.
Valeu pessoal.
Supondo que sua classe Resposta tenha uma referência para a Pergunta, assim:
Pergunta pergunta = new Pergunta();
pergunta.setId(id);// seta o id da pergunta aqui, e depois passa ela pro Criteria:
List<Respostas> results = c.add(Restrictions.eq("pergunta", pergunta)).list();
[quote=marcelo.bellissimo]Supondo que sua classe Resposta tenha uma referência para a Pergunta, assim:
Pergunta pergunta = new Pergunta();
pergunta.setId(id);// seta o id da pergunta aqui, e depois passa ela pro Criteria:
List<Respostas> results = c.add(Restrictions.eq("pergunta", pergunta)).list();
[/quote]
Pois é man, mas tipo assim: eu tenho cadastradas, por exemplo, as perguntas 1 e 2
eu quero que me apareçam somente as respostas da pergunta 1
tem como eu delimitar isso na criteria??
[quote=Kleber-rr][quote=marcelo.bellissimo]Supondo que sua classe Resposta tenha uma referência para a Pergunta, assim:
Pergunta pergunta = new Pergunta();
pergunta.setId(id);// seta o id da pergunta aqui, e depois passa ela pro Criteria:
List<Respostas> results = c.add(Restrictions.eq("pergunta", pergunta)).list();
[/quote]
Pois é man, mas tipo assim: eu tenho cadastradas, por exemplo, as perguntas 1 e 2
eu quero que me apareçam somente as respostas da pergunta 1
tem como eu delimitar isso na criteria??[/quote]
Então, é justamente isso que tá fazendo essa criteria… você está buscando uma lista de objetos Resposta, onde a Pergunte tem o id=? … 
[quote=marcelo.bellissimo][quote=Kleber-rr][quote=marcelo.bellissimo]Supondo que sua classe Resposta tenha uma referência para a Pergunta, assim:
Pergunta pergunta = new Pergunta();
pergunta.setId(id);// seta o id da pergunta aqui, e depois passa ela pro Criteria:
List<Respostas> results = c.add(Restrictions.eq("pergunta", pergunta)).list();
[/quote]
Pois é man, mas tipo assim: eu tenho cadastradas, por exemplo, as perguntas 1 e 2
eu quero que me apareçam somente as respostas da pergunta 1
tem como eu delimitar isso na criteria??[/quote]
Então, é justamente isso que tá fazendo essa criteria… você está buscando uma lista de objetos Resposta, onde a Pergunte tem o id=? …
[/quote]
Mano, vou testar e te falo. Valeu.
Quando for assim, faz o teste, e vê qual o SQL que ele gera… e se tiver errado do jeito que eu fiz, mal ai, é que hoje é segunda-feira, sabe como é… :hunf:
Amigão, ficaria mais ou menos assim??
@SuppressWarnings("unchecked")
public List<Respostas> getRespostasByPergunta1(Long id) {
Criteria c = session.createCriteria(Respostas.class);
Perguntas pergunta = new Perguntas();
pergunta.setCod_perguntas(id); //aqui vc pediu para setar o id da pergunta: por exemplo a pergunta de id 1, como ficaria??
List<Respostas> results = c.add(Restrictions.eq("pergunta", pergunta))
.list();
return results;
}
Desculpa o aluguel 
valeu.
E o método no Bean, ficaria assim??
public List<Respostas> getRespostasPergunta1() {
Session session = HibernateUtil.currentSession();
QuestionarioDao dao = new QuestionarioDao(session, Questionario.class);
List<Respostas> lista = dao.getRespostasByPergunta1(this.questionario
.getResposta().getPergunta().getCod_perguntas());
return lista;
}
Agradeço a ajuda.
Então, do jeito que tá ai, tá certo:
Quando você chamar esse método, tá passando o id da pergunta, creio eu, pelo método this.questionario.getResposta().getPergunta().getCod_perguntas(), e o criteria vai adicionar o id (se é que ele existe) na criteria… no problems…
[quote=marcelo.bellissimo]Então, do jeito que tá ai, tá certo:
Quando você chamar esse método, tá passando o id da pergunta, creio eu, pelo método this.questionario.getResposta().getPergunta().getCod_perguntas(), e o criteria vai adicionar o id (se é que ele existe) na criteria… no problems…[/quote]
Marcelo, não funcionou…
eu tenho q passar esse valor para a critéria ou para o método (acho q para o método), pois ele me retorna uma lista vazia…
a agora??

Minha tabela no postgresql está assim:
CREATE TABLE resposta
(
cod_respostas bigint NOT NULL,
descricao character varying(255),
marcar boolean,
resposta_complemento character varying(255),
perguntas_cod_perguntas bigint,
CONSTRAINT resposta_pkey PRIMARY KEY (cod_respostas),
CONSTRAINT fkebb72721ba848fcf FOREIGN KEY (perguntas_cod_perguntas)
REFERENCES pergunta (cod_perguntas) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (OIDS=FALSE);
ALTER TABLE resposta OWNER TO postgres;
A tabela está devidamente alimentada, o que eu quero é fazer uma consulta apenas dos itens com valor 1 do campo perguntas_cod_perguntas.
Alguem pode ajudar?
Valeu!!
Então… esse método aqui tá retornando algum valor?
[quote=marcelo.bellissimo]Então… esse método aqui tá retornando algum valor?
Ess método dá erro, substitui por esse aqui (que inclusive eu uso em combos alinhados):
[code] public List<SelectItem> getRespostasPergunta1() {
Session session = HibernateUtil.currentSession();
RespostasDao dao = new RespostasDao(session, Respostas.class);
List<Respostas> respostas = dao.getRespostasByPergunta1(this.pergunta
.getCod_perguntas());
List<SelectItem> items = new ArrayList<SelectItem>(respostas.size());
for (Respostas r : respostas) {
items.add(new SelectItem(r.getCod_respostas(), r.getDescricao()));
}
return items;
}[/code]
O negocio agora é passar o valor para esse método pelo próprio método…
[quote=Kleber-rr]Olá pessoal, td bem??
É o seguinte: quero montar uma criteria mais ou menos assim:
@SuppressWarnings("unchecked")
public List<Respostas> getRespostasByPergunta(Long id) {
Criteria c = session.createCriteria(Respostas.class);
List<Respostas> results = c.createCriteria("pergunta").add(
Restrictions.eq("cod_pergunta", id)).list();
return results;
}
[/quote]
Vc tem um método na classe da pergunta chamado getCod_pergunta()?
Não use _ nos nomes. use a convenção de javabeans. o metodo deve ser getCodigoPergunta e o criteria deve ser
List<Respostas> results = c.createCriteria("pergunta").add(
Restrictions.eq("codigoPergunta", id)).list();
Lembre-se que a restrição atua sobre a propriedade e não sobre o atributo da classe. Ou seja, um getXXX será chamado.
Foi justamente o que eu falei pra ele… agora, o problema é que ele não está conseguindo pegar o código da pergunta… ai já é outro problema, nada de errado com a Criteria em sí…
Kleber, é simples… não sei como está o seu código mas é só dar um jeito de pegar o código da Pergunta e passar para aquele método que fizemos acima… simples…
[quote=sergiotaborda][quote=Kleber-rr]Olá pessoal, td bem??
É o seguinte: quero montar uma criteria mais ou menos assim:
@SuppressWarnings("unchecked")
public List<Respostas> getRespostasByPergunta(Long id) {
Criteria c = session.createCriteria(Respostas.class);
List<Respostas> results = c.createCriteria("pergunta").add(
Restrictions.eq("cod_pergunta", id)).list();
return results;
}
[/quote]
Vc tem um método na classe da pergunta chamado getCod_pergunta()?
Não use _ nos nomes. use a convenção de javabeans. o metodo deve ser getCodigoPergunta e o criteria deve ser
List<Respostas> results = c.createCriteria("pergunta").add(
Restrictions.eq("codigoPergunta", id)).list();
Lembre-se que a restrição atua sobre a propriedade e não sobre o atributo da classe. Ou seja, um getXXX será chamado.[/quote]
Blz Sergio, valeu pela dica… realmente naum sabia disso… mas e quanto à minha dúvida??
[quote=Kleber-rr]
Blz Sergio, valeu pela dica… realmente naum sabia disso… mas e quanto à minha dúvida??[/quote]
Qual duvida. Altera o codigo como lhe disse que vai funcionar como vc quer.
Pessoal, como ficaria essa query em criteria?? SELECT * FROM resposta WHERE perguntas_cod_perguntas = 1
Valeu!!
[quote=Kleber-rr]Pessoal, como ficaria essa query em criteria?? SELECT * FROM resposta WHERE perguntas_cod_perguntas = 1
Valeu!![/quote]
Criteria criteria = session.createCriteria(Resposta.class);
criteria.add(Restricions.eq("perguntas_cod_perguntas", new Long(1) ));
List results = criteria.list();