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