SQL Native

3 respostas
ddark.emanu

Preciso fazer uma consulta no banco de dados que me retorne uma lista de Objetos(ItemPesquisa) o qual possui 2 classes relacionadas(Pesquisa e Produto).Estou com o seguinte problema , na hora retornar a o resultado da busca os id’s de Pesquisa e Produto estão igual ao do ItemPesquisa

Classe ItemPesquisa

@Table(name = "ITEM_PESQUISA")
public class ItemPesquisa implements Serializable {
	
	
	private static final long serialVersionUID = -8360859283957116134L;
	private Long codigo;
	private Pesquisa pesquisa;
	private String comentario;
	private Produto produto;
	private Long ranking;
	private List<Resposta> respostas;
	
	
	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="ITEM_PESQUISA_SEQ")
	public Long getCodigo() {
		return codigo;
	}

	@ManyToOne
	@JoinColumn(name="produto",referencedColumnName="codigo")
	public Produto getProduto() {
		return produto;
	}
	
	@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL )
	@JoinColumn(name="pesquisa",referencedColumnName="codigo")
	public Pesquisa getPesquisa() {
		return pesquisa;
	}

Método de Busca

@SuppressWarnings("unchecked") 
	@Override
	public List<ItemPesquisa> buscarItensPesquisa(Long codigoRepresentante ,OpcoesPesquisa opcoesPesquisa, String schema){

		StringBuilder sql = new StringBuilder()
		 	.append(" SELECT ")
		 	.append(" item_pesquisa.codigo, item_pesquisa.ranking, item_pesquisa.comentario , ")
		 	.append(" "+ schema +".produtos.*,")
		 	.append(" pesquisa.* ")
		 	.append(" FROM ")
		 	.append(" item_pesquisa ")
		 	.append(" INNER JOIN ")
		 	.append(" "+ schema +".produtos on item_pesquisa.produto = "+ schema +".produtos.codigo ")
		 	.append(" INNER JOIN ")
		 	.append(" pesquisa on item_pesquisa.pesquisa = pesquisa.codigo ")
		 	.append(" INNER JOIN ")
		 	.append(" "+ schema +".representantes on pesquisa.representante = "+ schema +".representantes.codigo ")
		 	.append(" WHERE ")
		 	.append(" pesquisa.representante = "+ codigoRepresentante +" ") 
		 	.append(" AND ")
		 	.append(" pesquisa.opcoes_pesquisa = "+ opcoesPesquisa.ordinal() +" ")
		 	.append(" ORDER BY  item_pesquisa.ranking ")
		 	;
		
		SQLQuery query = ComandoUtil.getSession(schema).createSQLQuery(sql.toString());
		query.setResultTransformer(Transformers.aliasToBean(ItemPesquisa.class)); 	
		
		query.addScalar("codigo",Hibernate.LONG)
			 .addScalar("ranking", Hibernate.LONG)
			 .addEntity(Pesquisa.class)	
			 .addEntity(Produto.class)
			 .addScalar("comentario",Hibernate.STRING)
		;
		List<ItemPesquisa> list = query.list(); 
	return query.list() ;
}[u]

Teste

List<ItemPesquisa> list = query.list(); 
for ( ItemPesquisa i : list){
			System.out.println(i);
			System.out.println("PESQUISA");
			System.out.println(i.getPesquisa());
			System.out.println(i.getPesquisa().getCodigo());
			System.out.println("PRODUTO");
			System.out.println(i.getProduto());
			System.out.println(i.getProduto().getCodigo());
			System.out.println(i.getProduto().getDescricao());
}

Resultado do Teste

16:20:30,204 INFO  [STDOUT] Codigo: [100] -  Ranking: 0
16:20:30,204 INFO  [STDOUT] PESQUISA
16:20:30,204 INFO  [STDOUT] Pesquisa@1ca7213
16:20:30,204 INFO  [STDOUT] 100
16:20:30,204 INFO  [STDOUT] PRODUTO
16:20:30,204 INFO  [STDOUT] Produto@76f8d
16:20:30,204 INFO  [STDOUT] 100
16:20:30,204 INFO  [STDOUT] BOLSA DETALHE ESCAMADO

3 Respostas

david.cs20

Vc ja testou o sql no banco?
Se nao esse deve ser o seu primeiro teste.

pmlm

Penso que o problema deve ser de ambas as colunas terem o nome codigo. Já experimentaste utilizar um alias numa delas?

ddark.emanu

Já teste o SQL está ok! , trazendo os valores corretos.
Também ja testei trocar o nome do campo código

Criado 7 de outubro de 2010
Ultima resposta 7 de out. de 2010
Respostas 3
Participantes 3