Como jogar o resultado de um sql para dentro de um objeto

Java

24/03/2012

Eu preciso de um executar um comando sql(hibernate) e depois jogar o resultado dentro de uma classe. Estou listando com o sql todos os campos correspondentes a classe mas quando eu vou jogar no <p:dataTable> da erro. Como eu faço ?
Outra coisa o comando sql retorna a linha , mas eu não consigo pegar os campos e jogar na classe
Veja o meu método.
public List<Empresa> listarPorPolo(Integer codigoPolo) {
System.out.println(Chegou no metodo);
StringBuffer sql = new StringBuffer();
sql.append(select e.id_empresa,e.nome,e.nome_fan );
sql.append(from empresa e where not exists );
sql.append((select id_empresa from polo_empresa pe where );
sql.append(e.id_empresa = pe.id_empresa and pe.id_polo = :polo));
SQLQuery query = this.session.createSQLQuery(sql.toString());
query.setParameter(polo,codigoPolo);
return query.list();
}
Minha classe empresa
@Entity
@Table(name=empresa)
@SequenceGenerator(name=seq_empresa,sequenceName=seq_empresa)
public class Empresa implements Serializable{

private static final long serialVersionUID = 498803724556690440L;

@Id
@GeneratedValue(generator=seq_empresa,strategy= GenerationType.AUTO)
@Column(name=id_empresa)
private Integer codigoEmpresa;

@Column(name=nome,length=40)
private String nome ;

@Column(name=nome_fan,length=20)
private String nomeFantasia ;


@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name=polo_empresa,joinColumns={@JoinColumn(name=id_empresa)},
inverseJoinColumns={@JoinColumn(name=id_polo)})
@org.hibernate.annotations.ForeignKey(name = fk_empresa_polo)
private Set<Polo> polo = new HashSet<Polo>(0);

public Set<Polo> getPolo() {
return polo;
}


public void setPolo(Set<Polo> polo) {
this.polo = polo;
}


public Integer getCodigoEmpresa() {
return codigoEmpresa;
}


public void setCodigoEmpresa(Integer codigoEmpresa) {
this.codigoEmpresa = codigoEmpresa;
}


public String getNome() {
return nome;
}


public void setNome(String nome) {
this.nome = nome;
}


public String getNomeFantasia() {
return nomeFantasia;
}


public void setNomeFantasia(String nomeFantasia) {
this.nomeFantasia = nomeFantasia;
}


@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((codigoEmpresa == null) ? 0 : codigoEmpresa.hashCode());
result = prime * result + ((nome == null) ? 0 : nome.hashCode());
result = prime * result
+ ((nomeFantasia == null) ? 0 : nomeFantasia.hashCode());
result = prime * result + ((polo == null) ? 0 : polo.hashCode());
return result;
}


@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Empresa other = (Empresa) obj;
if (codigoEmpresa == null) {
if (other.codigoEmpresa != null)
return false;
} else if (!codigoEmpresa.equals(other.codigoEmpresa))
return false;
if (nome == null) {
if (other.nome != null)
return false;
} else if (!nome.equals(other.nome))
return false;
if (nomeFantasia == null) {
if (other.nomeFantasia != null)
return false;
} else if (!nomeFantasia.equals(other.nomeFantasia))
return false;
if (polo == null) {
if (other.polo != null)
return false;
} else if (!polo.equals(other.polo))
return false;
return true;
}



}
Jose Boas

Jose Boas

Curtidas 0

Respostas

Robson Teixeira

Robson Teixeira

24/03/2012

Iae kra blz
so lhe informar o datatable intera a coleção criada pelo seu método e no datatable tem um atributo chamado var que representa o objeto iterado.

att
robson
GOSTEI 0
Jose Boas

Jose Boas

24/03/2012

Mas creio que não é isso pois ele retona este erro

java.lang.NumberFormatException: For input string: codigoEmpresa
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
o sql me devolve id_empresa mas na classe é codigoEmpresa, eu sei mais ou menos o que é mas não sei como implementar.
GOSTEI 0
Jose Boas

Jose Boas

24/03/2012

Consegui resolver. Eu li o Chapter 16. Native SQL da dumentação do Hibernate e encontrei esta solucao addEntity(Classe.class) então ficou assim

sql.append( select e.* );
sql.append( from empresa e where not exists );
sql.append( (select pe.id_empresa from polo_empresa pe where );
sql.append( e.id_empresa = pe.id_empresa and pe.id_polo = :polo) );
SQLQuery query = this.session.createSQLQuery(sql.toString()).addEntity(Empresa.class);
query.setParameter(polo,codigoPolo);
return query.list();
GOSTEI 0
Robson Teixeira

Robson Teixeira

24/03/2012

show de bola kra
e obrigado por postar a solução.

favor fechar o chamado assim que possivel.
att
robson
GOSTEI 0
Dyego Carmo

Dyego Carmo

24/03/2012

Obrigado por compartilhar sua solucao com a comunida,

Voce nao tem ideia de como isso ajuda :)

Valeu !
GOSTEI 0
POSTAR