Pessoal , boa tarde.
Estou aprendendo java e junto o Hibernate tbm, então meu conhecimento é muito limitado.
Oq acontece é o seguinte :
Estou tentando mapear uma tabela sem PK usando o Hibernate Tools para a tabela abaixo
QTD INTEGER Nullable
NOME VARCHAR(10) Nullable
SOBRENOME VARCHAR(10) Nullable
VALORUN FLOAT Nullable
VALORTOT FLOAT Nullable
Usando o Hibernate Tools foi gerado os seguintes códigos: Venda.java e VendaId.java
Venda.java
/**
* Venda generated by hbm2java
*/
@Entity
@Table(name = "VENDA")
public class Venda implements java.io.Serializable {
private VendaId id;
public Venda() {
}
public Venda(VendaId id) {
this.id = id;
}
@EmbeddedId
@AttributeOverrides( {
@AttributeOverride(name = "qtd", column = @Column(name = "QTD")),
@AttributeOverride(name = "nome", column = @Column(name = "NOME", length = 10)),
@AttributeOverride(name = "sobrenome", column = @Column(name = "SOBRENOME", length = 10)),
@AttributeOverride(name = "valorun", column = @Column(name = "VALORUN", precision = 7, scale = 7)),
@AttributeOverride(name = "valortot", column = @Column(name = "VALORTOT", precision = 7, scale = 7)) })
public VendaId getId() {
return this.id;
}
public void setId(VendaId id) {
this.id = id;
}
}
VenaId.java
// Generated 13/11/2009 16:10:51 by Hibernate Tools 3.2.4.GA
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
* VendaId generated by hbm2java
*/
@Embeddable
public class VendaId implements java.io.Serializable {
private Integer qtd;
private String nome;
private String sobrenome;
private Double valorun;
private Double valortot;
public VendaId() {
}
public VendaId(Integer qtd, String nome, String sobrenome, Double valorun,
Double valortot) {
this.qtd = qtd;
this.nome = nome;
this.sobrenome = sobrenome;
this.valorun = valorun;
this.valortot = valortot;
}
@Column(name = "QTD")
public Integer getQtd() {
return this.qtd;
}
public void setQtd(Integer qtd) {
this.qtd = qtd;
}
@Column(name = "NOME", length = 10)
public String getNome() {
return this.nome;
}
public void setNome(String nome) {
this.nome = nome;
}
@Column(name = "SOBRENOME", length = 10)
public String getSobrenome() {
return this.sobrenome;
}
public void setSobrenome(String sobrenome) {
this.sobrenome = sobrenome;
}
@Column(name = "VALORUN", precision = 7, scale = 7)
public Double getValorun() {
return this.valorun;
}
public void setValorun(Double valorun) {
this.valorun = valorun;
}
@Column(name = "VALORTOT", precision = 7, scale = 7)
public Double getValortot() {
return this.valortot;
}
public void setValortot(Double valortot) {
this.valortot = valortot;
}
public boolean equals(Object other) {
if ((this == other))
return true;
if ((other == null))
return false;
if (!(other instanceof VendaId))
return false;
VendaId castOther = (VendaId) other;
return ((this.getQtd() == castOther.getQtd()) || (this.getQtd() != null
&& castOther.getQtd() != null && this.getQtd().equals(
castOther.getQtd())))
&& ((this.getNome() == castOther.getNome()) || (this.getNome() != null
&& castOther.getNome() != null && this.getNome()
.equals(castOther.getNome())))
&& ((this.getSobrenome() == castOther.getSobrenome()) || (this
.getSobrenome() != null
&& castOther.getSobrenome() != null && this
.getSobrenome().equals(castOther.getSobrenome())))
&& ((this.getValorun() == castOther.getValorun()) || (this
.getValorun() != null
&& castOther.getValorun() != null && this.getValorun()
.equals(castOther.getValorun())))
&& ((this.getValortot() == castOther.getValortot()) || (this
.getValortot() != null
&& castOther.getValortot() != null && this
.getValortot().equals(castOther.getValortot())));
}
public int hashCode() {
int result = 17;
result = 37 * result
+ (getQtd() == null ? 0 : this.getQtd().hashCode());
result = 37 * result
+ (getNome() == null ? 0 : this.getNome().hashCode());
result = 37 * result
+ (getSobrenome() == null ? 0 : this.getSobrenome().hashCode());
result = 37 * result
+ (getValorun() == null ? 0 : this.getValorun().hashCode());
result = 37 * result
+ (getValortot() == null ? 0 : this.getValortot().hashCode());
return result;
}
}
Criei tabem uma DAO genérica (HibernateDAO.java) e um sessionfactory (HibernateUtil.java), conforme os códigos
HibernateDAO.java
import java.io.Serializable;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
public class HibernateDAO<T> implements InterfaceDAO<T> {
private Class<T> classe;
private Session session;
public HibernateDAO(Class<T> classe, Session session) {
super();
this.classe = classe;
this.session = session;
}
@Override
public void atualizar(T bean) {
session.update(bean);
}
@Override
public void excluir(T bean) {
session.delete(bean);
}
@Override
public T getBean(Serializable codigo) {
T bean = (T)session.get(classe, codigo);
return bean;
}
@Override
public List<T> getBeans() {
List<T> beans = (List<T>)session.createCriteria(classe).list();
return beans;
}
@Override
public void salvar(T bean) {
session.save(bean);
}
@Override
public List<T> getBeansByExample(T bean) {
Example example = Example.create(bean);
example.enableLike(MatchMode.START);
example.ignoreCase();
example.excludeZeroes();
return session.createCriteria(classe).add(example).list();
}
}
HibernateUtil.java
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
static
{
AnnotationConfiguration configuration = new AnnotationConfiguration().configure("hibernate.cfg.xml");
sessionFactory = configuration.buildSessionFactory();
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
E para testar criei uma servelet com o trecho do código abaixo
teste.java
Session session;
session = HibernateUtil.getSessionFactory().openSession();
HibernateDAO<Venda> T2 = new HibernateDAO<Venda>(Venda.class,session);
List<Venda> listaT2 = T2.getBeans();
for(Venda lst: listaT2){
System.out.println(lst.getId().getNome());
}
Oque acontece é o seguinte : recebo a exceptio “java.lang.NullPointerException” , o método getId do Venda.java está retornando nulo , mas pq isso ? no console eu consigo ver que o Hibernate gerou o sql, mas não consigo recuperar os dados.
Obrigado a todos
[]s