Problema no AnnotationConfiguration (Eclipse + MySQL)

Boa tarde pessoal…

Caros, pesquisei por aqui, no entanto não achei algo que pudesse me ajudar…
Eu estou criando um projeto utilizando o Eclipse e MySQL, tenho uma classe DAO que faz a seguinte chamada:

Só que quando rodo meu projeto, dá o seguinte erro:

java.lang.NullPointerException
	at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1782)
	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1229)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:733)
	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:498)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:915)
	at dao.HibernateUtility.<clinit>(HibernateUtility.java:15)[/code]

Identifiquei sendo nessa linha de código, quando debuguei.. Esse problema só começou a dar quando iniciei um novo projeto utilizando MySQL, quando estava usando Oracle, não tinha problema..

Segue o meu hibernate.cfg.xml:

[code]<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
	 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>   
	 <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/projeto</property>   
	 <property name="hibernate.connection.username">user</property>   
	 <property name="hibernate.connection.password">senhas</property>   
	 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>   
	 
    <!--  thread is the short name for
      org.hibernate.context.ThreadLocalSessionContext
      and let Hibernate bind the session automatically to the thread
    -->
    <property name="current_session_context_class">thread</property>
    <!-- this will show us all sql statements -->
    <property name="hibernate.show_sql">true</property>
	
	<mapping class="bean.Usuario"/>

</session-factory>
</hibernate-configuration>[/code]

Minha classe DAO:

[code]public class UsuarioDao {

	SessionFactory f = null;
	Session s = null;
	Transaction t = null;

	public UsuarioDao() {

		f = new AnnotationConfiguration().configure("/dao/hibernate.cfg.xml").buildSessionFactory(); // --> Aqui que dá problema!!!!
		s = f.openSession();
		t = s.beginTransaction();

	}

       	public Usuario listarPorLoginSenha(Usuario usu) {
		
        Query query = s.createQuery("from Usuario u where u.us_chave = :chave and u.us_senha =:senha");
        query.setParameter("chave", usu.getUs_chave());
	query.setParameter("senha", usu.getUs_senha());
        List lista = query.list();  
        s.close();
        if (lista.size() == 0){
			return null;
		}
		return (Usuario)lista.get(0);
		
	}
}

Se puderem me ajudar nisso, agradeço imensamente!

Criei um novo projeto, utilizando o Oracle novamente, mas agora deu o mesmo problema acima mencionado com o MySQL… Tô desconfiando que é algum problema de lib…

Alguém aí tem um projeto redondo rodando no Eclipse, utilizando Struts2, hibernate 3 e MySQL, que possa me enviar as Jar’s… Queria verificar se não é esse o problema… Ou em último caso me passem um link para baixar…

Obrigado pessoal!

Colega, vc tem certeza que anotou corretamente sua bean? (nao parece no seu codigo copiado)…

O meu bean está OK… O problema ocorre quando tento instanciar a minha DAO e ao chamar o método construtor do método DAO, dá o problema…

Segue a minha action, que está instanciando a DAO e dá o problema:

[code]package action;

import bean.Usuario;
import com.opensymphony.xwork2.ActionSupport;
import dao.UsuarioDao;
public class LoginMovimentacaoAction extends ActionSupport {

private static final long serialVersionUID = 1L;
private String chave;
private String senha;


public String verificaAcesso() {

	Usuario usuario = new Usuario();
	UsuarioDao usuarioDao = new UsuarioDao(); // --> O problema dá nessa chamada!!!

	usuario.setUs_chave(chave.trim());
	usuario.setUs_senha(senha.trim());

	System.out.println(usuario.getUs_senha());
	System.out.println(usuario.getUs_senha());

	try {
		Usuario func = usuarioDao.listarPorLoginSenha(usuario);
		if (func != null) {
			return "acessoAdministrador";
		} else {
			addActionError("Login/Senha incorretos");
			return "falhaLogin";
		}

	} catch (Exception e) {
		e.printStackTrace();
		return "falhaLogin";
	}
	
	

}

public String verificaAcesso2(){
	return "falhaLogin";
}



public String getChave() {
	return chave;
}

public void setChave(String chave) {
	this.chave = chave;
}

public String getSenha() {
	return senha;
}

public void setSenha(String senha) {
	this.senha = senha;
}

public static long getSerialversionuid() {
	return serialVersionUID;
}

}[/code]

De qq forma, segue a minha bean:

[code]package bean;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = “usuario”)
public class Usuario implements Serializable{

private static final long serialVersionUID = 759576986867169645L;

@Id
@Column(name = "us_chave")
private String us_chave;

@Column(name = "de_nome")
private String de_nome;

@OneToOne
@JoinColumn(name="papel_id_papel")
private Papel papel;

@Column(name = "us_dt_inicio")
private Date us_dt_inicio;

@Column(name = "us_dt_fim")
private Date us_dt_fim;

@Column(name = "us_senha")
private String us_senha;

public String getUs_chave() {
	return us_chave;
}

public void setUs_chave(String usChave) {
	us_chave = usChave;
}

public String getDe_nome() {
	return de_nome;
}

public void setDe_nome(String deNome) {
	de_nome = deNome;
}

public Papel getPapel() {
	return papel;
}

public void setPapel(Papel papel) {
	this.papel = papel;
}

public Date getUs_dt_inicio() {
	return us_dt_inicio;
}

public void setUs_dt_inicio(Date usDtInicio) {
	us_dt_inicio = usDtInicio;
}

public Date getUs_dt_fim() {
	return us_dt_fim;
}

public void setUs_dt_fim(Date usDtFim) {
	us_dt_fim = usDtFim;
}

public String getUs_senha() {
	return us_senha;
}

public void setUs_senha(String usSenha) {
	us_senha = usSenha;
}

public static long getSerialversionuid() {
	return serialVersionUID;
}

}[/code]

Amigo,

Pelo jeito que está a tua Bean e o teu hibernate.cfg.xml, o problema parece ser de configuração. Você define que vai existir um relacionamento de OneToOne, mas aparentemente vc não deve ter feito a anotação na outra class (Papel), e tampouco declarou ela no seu hibernate.cfg.xml.

Tente remover essa relação por hora e daí tente rodar a aplicação…

Abraço

Eu atualizei o meu hibernate.cfg. Mapiei todas as minhas beans. Agora que vc comentou em relação a fazer anotação na outra classe (Papel), realmente não fiz… Mas o que eu deveria anotar na classe papel? A regra de negócio do meu projeto é que cada usuário pode ter apenas um papel, por isso o (OneToOne) e guardo essa informação dentro da classe usuario. Não sei o que deve ser informado na classe papel…

Minha hibernate.cfg.xml:

[code] <?xml version="1.0" encoding="UTF-8" ?>

  • com.mysql.jdbc.Driver jdbc:mysql://localhost:3306/projetocast guilherme senhas org.hibernate.dialect.MySQLDialect
  • thread
  • true












    [/code]

Minha bean.papel.class:

[code]package bean;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = “papel”)
public class Papel implements Serializable{

private static final long serialVersionUID = -4342582894712372469L;

@Id
@Column(name = "id_papel")
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id_papel;

@Column(name = "de_papel")
private String de_papel;

public Integer getId_papel() {
	return id_papel;
}

public void setId_papel(Integer idPapel) {
	id_papel = idPapel;
}

public String getDe_papel() {
	return de_papel;
}

public void setDe_papel(String dePapel) {
	de_papel = dePapel;
}

public static long getSerialversionuid() {
	return serialVersionUID;
}

}
[/code]