Listagem - Hibernate e Vraptor

Galera,

Eu preciso fazer uma listagem onde preciso apenas de 3 campos de uma tabela.

Tentei fazer assim.

Meu dao.

public List<ProdutoEmpresa> buscamenorpreco() {
				return (List<ProdutoEmpresa>) session.createSQLQuery("select cod_empresa, cod_produto, preco from ProdutoEmpresa  where ativo=1 AND cod_produto=8"); 			
    
				}

Meu controller.

//Lista todos - teste
		@Get("/produtoEmpresa2")
		public List<ProdutoEmpresa> lista2() {
		return dao.buscamenorpreco();
		}

Minha jsp.

<body>
<table>
<thead>
<tr>
<th>Empresa</th>
<th>Produto</th>
<th>Preço</th>
<th>Editar</th>
<th>Remover</th>
</tr>
</thead>
<tbody>
<c:forEach items="${produtoEmpresa2List}" var="produtoEmpresa2">
<tr>
<td>${produtoEmpresa2.empresa2.fantasia}</td>
<td>${produtoEmpresa2.produto2.nome}</td>
<td>${produtoEmpresa2.preco}</td>
&lt;td&gt;<a /produtoEmpresa/${produtoEmpresa.id}"/>&quot;&gt;Editar</a>&lt;/td&gt;
&lt;td&gt;&lt;form action="&lt;c:url value="/produtoEmpresa/${produtoEmpresa.id}"/&gt;&quot;method=&quot;POST&quot;&gt;
&lt;button class="link" name="_method" value="DELETE"&gt;Remover&lt;/button&gt;&lt;/form&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/c:forEach&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/body&gt;

Erro

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: java.lang.ClassCastException: org.hibernate.internal.SQLQueryImpl cannot be cast to java.util.List

Esse código está errado: return (List) session.createSQLQuery(“select cod_empresa, cod_produto, preco from ProdutoEmpresa where ativo=1 AND cod_produto=8”);

Você não executou a query…

Cara, no seu DAO você está invocando createSQLQuery e fazendo cast para List… acho que não é isso que você queria fazer, é ?

Eu coloquei no final do dao

.list();

[code]
public List<ProdutoEmpresa> buscamenorpreco() {
return (List<ProdutoEmpresa>) session.createSQLQuery(“select cod_empresa, cod_produto, preco from ProdutoEmpresa where ativo=1 AND cod_produto=8”).list();

			}[/code]

Funciou, mas ficou em branco a jsp.
E quando faço a consulta no braço no banco, ta funcionando.
Olha minha jsp como ficou.

&lt;c:forEach items="${produtoEmpresa2List}" var="produtoEmpresa2"&gt; &lt;tr&gt; &lt;td&gt;${produtoEmpresa2.empresa2.fantasia}&lt;/td&gt; &lt;td&gt;${produtoEmpresa2.produto2.nome}&lt;/td&gt; &lt;td&gt;${produtoEmpresa2.preco}&lt;/td&gt; &lt;td&gt;<a /produtoEmpresa/${produtoEmpresa.id}"/>&quot;&gt;Editar</a>&lt;/td&gt; &lt;td&gt;&lt;form action="&lt;c:url value="/produtoEmpresa/${produtoEmpresa.id}"/&gt;&quot;method=&quot;POST&quot;&gt; &lt;button class="link" name="_method" value="DELETE"&gt;Remover&lt;/button&gt;&lt;/form&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/c:forEach&gt;
Pq?

Eu quero fazer uma consulta utilizando o sql.
Tem como não?

[quote=101574]Eu quero fazer uma consulta utilizando o sql.
Tem como não?[/quote]
O que ela retornou? uma lista vazia? não retornou nada? foi lançada uma exceção?

Não sei se ajuda. Mas no console não tem erro não.
E tem a consulta que eu fiz la.

Olha so.

Hibernate: 
    select
        cod_empresa,
        cod_produto,
        preco 
    from
        ProdutoEmpresa  
    where
        ativo=1 
        AND cod_produto=8;

[quote=101574]Não sei se ajuda. Mas no console não tem erro não.
E tem a consulta que eu fiz la.

Olha so.

Hibernate: select cod_empresa, cod_produto, preco from ProdutoEmpresa where ativo=1 AND cod_produto=8; [/quote]
Tá certo, você respondeu uma das questões, então refaço a pergunta reformulada:

O que ela retornou? uma lista vazia? não retornou nada?

Retornou nada.

Acho que o erro agora,e com a listagem.
Tem como me ajudar?

A minha listagem normal está assim.

&lt;c:forEach items="${produtoEmpresaList}" var="produtoEmpresa"&gt;
&lt;tr&gt;
&lt;td&gt;${produtoEmpresa.empresa2.fantasia}&lt;/td&gt;
&lt;td&gt;${produtoEmpresa.produto2.nome}&lt;/td&gt;
&lt;td&gt;${produtoEmpresa.quantidade_estoque}&lt;/td&gt;
&lt;td&gt;${produtoEmpresa.preco}&lt;/td&gt;
&lt;td&gt;${produtoEmpresa.ativo}&lt;/td&gt;
&lt;td&gt;<a /produtoEmpresa/${produtoEmpresa.id}"/>&quot;&gt;Editar</a>&lt;/td&gt;
&lt;td&gt;&lt;form action="&lt;c:url value="/produtoEmpresa/${produtoEmpresa.id}"/&gt;&quot;method=&quot;POST&quot;&gt;
&lt;button class="link" name="_method" value="DELETE"&gt;Remover&lt;/button&gt;&lt;/form&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/c:forEach&gt;

Essa listagem agora, está assim.

&lt;c:forEach items="${produtoEmpresa2List}" var="produtoEmpresa2"&gt;
&lt;tr&gt;
&lt;td&gt;${produtoEmpresa.empresa2.fantasia}&lt;/td&gt;
&lt;td&gt;${produtoEmpresa.produto2.nome}&lt;/td&gt;
&lt;td&gt;${produtoEmpresa.preco}&lt;/td&gt;
&lt;td&gt;<a /produtoEmpresa/${produtoEmpresa.id}"/>&quot;&gt;Editar</a>&lt;/td&gt;
&lt;td&gt;&lt;form action="&lt;c:url value="/produtoEmpresa/${produtoEmpresa.id}"/&gt;&quot;method=&quot;POST&quot;&gt;
&lt;button class="link" name="_method" value="DELETE"&gt;Remover&lt;/button&gt;&lt;/form&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/c:forEach&gt;

Que não aparece nada.

Galera, ta chegando.

To fazendo um teste na listagem geral.

Olha só o que eu fiz.

public List&lt;ProdutoEmpresa&gt; listaTudo() {
	List resultado = this.session.createCriteria(ProdutoEmpresa.class).list();
	resultado.add( Restrictions.like("cod_produto", "8"));
	return resultado;
	}

Dei uma estudada. Documentação do Hibernate.
So que está dando o erro.

br.com.caelum.vraptor.view.ResultException: org.apache.jasper.JasperException: javax.el.PropertyNotFoundException: Property 'empresa2' not found on type org.hibernate.criterion.SimpleExpression

Quando eu tiro o Restrictions.like.
Ele lista normalmente. Pq eu não consigo utiiza-lo. Pois, utilizando eu consigo fazer a minha consulta pelo próprio Hibernate, não precisaria do SQL.

Tem como me ajudar?
Vlws manos.

explicando o que está acontecendo: qdo vc usa uma SQLQuery ele nao vai te retornar uma List, vai ser sempre List<Object[]> (mas da pra transformar em algum objeto melhor)

o erro que ta dando na criteria eh pq vc esqueceu de chamar o metodo list() no final.

Valeu pela ajuda, mas o erro sumiu.
E os dados não aparecem.
Olha como ficou.

public List&lt;ProdutoEmpresa&gt; listaTudo() {
			List resultado = this.session.createCriteria(ProdutoEmpresa.class).list();
			resultado.add( Restrictions.like("cod_produto", "8"));
		    return ((Criteria) resultado).list();
			}

Está certo!