Problema no AnnotationConfiguration (Eclipse + MySQL)

5 respostas
G

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:

new AnnotationConfiguration().configure("/dao/hibernate.cfg.xml").buildSessionFactory();
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)

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:

<?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>

Minha classe DAO:

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!

5 Respostas

G

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!

Djonatah

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

G

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:

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;
	}
	
	
}

De qq forma, segue a minha bean:

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;
	}
	
}
Djonatah

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

G

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:
<?xml version="1.0" encoding="UTF-8" ?> 
  <!DOCTYPE hibernate-configuration (View Source for full doctype...)> 
- <hibernate-configuration>
- <session-factory>
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/projetocast</property> 
  <property name="hibernate.connection.username">guilherme</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.Atividade" /> 
  <mapping class="bean.Complexidade" /> 
  <mapping class="bean.Demanda" /> 
  <mapping class="bean.Efetividade" /> 
  <mapping class="bean.Movimentacao" /> 
  <mapping class="bean.Papel_Rel_Atividade" /> 
  <mapping class="bean.Papel" /> 
  <mapping class="bean.Projeto" /> 
  <mapping class="bean.Referencia" /> 
  <mapping class="bean.Usuario_Rel_Projeto" /> 
  <mapping class="bean.Usuario" /> 
  </session-factory>
  </hibernate-configuration>
Minha bean.papel.class:
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;
	}
	
}
Criado 9 de setembro de 2010
Ultima resposta 11 de set. de 2010
Respostas 5
Participantes 2