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]