Problema com Hibernate

9 respostas
S

Buenas galera…

Será que alguém pode me ajudar sobre o seguinte erro que está ocorrendo?

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoSuchMethodError: org.hibernate.util.ReflectHelper.classForName(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Class;

org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:752)

app.util.HibernateFactory.(HibernateFactory.java:17)

app.PessoaIncludeHibernate.execute(PessoaIncludeHibernate.java:24)

org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)

org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)

org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)

org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)

org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)

org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)

org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)

org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)

javax.servlet.http.HttpServlet.service(HttpServlet.java:709)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

[/code]

Sinceramente eu não faço idéia do que está ocorrendo, estou seguindo a risca uma apostila e não sei o que fazer…

Qualquer coisa eu posto o meu codigo…

vlw pessoal…

9 Respostas

andreiribas

Deve ser algum problema no mapeamento da classe… crie todos os métodos getters e setters dos atributos da classe e mapeie os métodos getters corretamente.

Qualquer coisa posta o código ai…

S

Andre eu não deu certo ou eu não fiz alguma coisa certa.

vou estar mandando o meu código. vlw cara!

Pessoa.hbm.xml

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

<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping.dtd">
<hibernate-mapping>
    <class name="app.bean.Pessoa" table="pessoa">
        <id name="id" column="id" type="int">
            <generator class="assigned"/>
        </id>
        <property name="nome" type="string"/>
        <property name="email" type="string"/>
        <property name="telefone" column="telefone" type="string"/>
    </class>
</hibernate-mapping>

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/db_java
		</property>
		<property name="hibernate.dialect">
			org.hibernate.dialect.MySQLDialect
		</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.show_sql">true</property>
	<property name="hibernate.format_sql">true</property>
	<mapping class="app.bean.Pessoa"/>
	</session-factory>
</hibernate-configuration>
Meu bean Pessoa
package app.bean;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;



@Entity
public class Pessoa {
	@Id
	@GeneratedValue
	private int id;
	private String nome;
	private String email;
	private String telefone;
	
	public String getNome(){
		return nome;
	}
	
	public void setNome(String nome){
		this.nome = nome;
	}
	
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
}
Meu HibernateFactory
public class HibernateFactory {

		private static SessionFactory factory;
		
		//cria configuração para a classe pessoa
		static{
			AnnotationConfiguration cfg = new AnnotationConfiguration();
			cfg.addAnnotatedClass(Pessoa.class);
			factory = cfg.buildSessionFactory();
		}
		
		public Session getSession(){
			return factory.openSession();
		}
}
e por último o Action do Struts
public class PessoaIncludeHibernate extends Action{
public String nome, email, telefone;
	
	public ActionForward execute(ActionMapping mapping, 
			 ActionForm form,
			 HttpServletRequest req,
			 HttpServletResponse res){
		
		
		Session session = new HibernateFactory().getSession();
		
		//recebe os dados do formulario...
		PessoaForm pessoaForm = (PessoaForm)  form;
		
		nome = pessoaForm.getNome();
		telefone = pessoaForm.getTelefone();
		email = pessoaForm.getEmail();
		
		
		//envia informações para o Bean...
		Pessoa pessoa = new Pessoa();
		
		pessoa.setNome(nome);
		pessoa.setTelefone(telefone);
		pessoa.setEmail(email);
	
		session.save(pessoa);
		session.close();
		
		
		return mapping.findForward("incluir");
	}

Bom o código é esse..

vlw!

Giulliano

Cara q apostila vc esta seguindo…

Vc esta usando annotations na sua classe Pessoa…não precisa criar o arquivo pessoa.hbm.xml

Vc importou todos os jars do hibernate core (hibernate.jar mais todos os libs da pasta lib dentro do hibernata) e todas as libs do hibernate annotations

DICA VALIOSA: se vc não possui muita experiência com hibernate não comece usando hibernate+struts…crie uma classe de teste com um método public static void main e faça os teste nela…quando funcionar vc põe na sua action

S

vlw a dica Giulliano,

Estou usando a apostila 21 da caelum, eu vou tentar fazer sem utilizar o Struts.

Eu importei tudo sim, peguei todos os .jar existentes e coloquei no meu projeto.

Mas eu usando o Hibernate com Annotation e eu possuir arquivos .hbm.xml, isso influencia no erro tb?

flw…

kadekdu

Kra reafirmo o que o camarada acima disse! eu sempre uso aki o hbm.xml… por padrão da galera aki! a maioria vence né!!! hahaha

seguinte…

no seu hibernate.cfg se não me engano tem q referenciar a o hbm q trabalha

ae nesse caso eu rancaria as anotações (NÃO TENHO NADA CONTRA!) só por costme de usar aki!

no demais se precisar tenho uma apostila fera em pt aki comigo!

o valor unitário seria de 500 reais! ahahaahah zuera!

só pedir!

abraço

kdu

S

kdu, gostaria de dar uma olhada nessa apostila sim, manda para mim???

A realidade é o seguinte eu estou aprendendo tudo ainda, tanto o Struts como o Hibernate, a minha maior preocupação é com o mercado de trabalho, ou seja, o que vcs programadores mais experientes utilizam…

Segundo vc utilizam-se mais o Hbm, certo?

flw!

kadekdu

kra aki a galera usa só .hbm.xml… não vejo mta treta nisso!
acho bacana até!

não sou experiente na área não kra… tenho pouco tempo de java… mas pelo q percebi a galera usa mto anotations…

seria legal levantar isso me interesso tb nessa parada!

mandei pra vc as paradas!

abraço

kdu

Rafael_Ferraro

Fala pessoal, estou passando por um problema parecido mas não consigo resolver.

Exception in thread "main" java.lang.NoSuchMethodError: org.hibernate.util.ReflectHelper.classForName(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Class;
	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:788)
	at teste.AdicionaEmail.main(AdicionaEmail.java:24)

estou fazendo o projeto no netbeans e já peguei todos os arquivos pelo próprio netbeans, por isso creio que o problema nao seja com a lib
segue minhas classes se alguem puder me ajudar

@Entity
public class Email implements Serializable{
    
    @Id @GeneratedValue
    private int id;
    private String assunto;
    private String texto;
    private String anexo;

   //getters e setters
<?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.dialect">org.hibernate.dialect.MySQLDialect</property>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/bdcatalogos</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">cadesbarneia</property>
    <mapping class="modelagem.Email"/>
  </session-factory>
</hibernate-configuration>

classe de teste

public class AdicionaEmail {

    public static void main(String[] args) {

        AnnotationConfiguration hibernate = new AnnotationConfiguration();
        hibernate.configure();

        SessionFactory factory = hibernate.buildSessionFactory(); // AQUI ELE GERA A EXCEPTION
        Session sessao = factory.openSession();

        Email email = new Email();
        email.setAssunto("Teste");
        email.setTexto("Teste");
        email.setAnexo("teste");

        Transaction tr = sessao.beginTransaction();
        sessao.save(email);
        tr.commit();

    }
}

MARQUEI A LINHA NA QUAL ELE TRAZ A EXCEPTION = SessionFactory factory = hibernate.buildSessionFactory();

alessandronarciso

E aih Rafael,
Cara use a classe HibernateUtil

public class HibernateUtil {

    private static final SessionFactory sessionFactory;
    
    static {
        try {
            // Create the SessionFactory from standard (hibernate.cfg.xml) 
            // config file.
            sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
        } catch (Throwable ex) {
            // Log the exception. 
            System.err.println("Initial SessionFactory creation failed." + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }
    
    public static Session getSessionFactory() {
        return sessionFactory.openSession();
    }
}

Na classe Main use apenas

Session sessao = new HibernateUtil().getSessionFactory();

Tente isso.

Falow

Criado 24 de julho de 2007
Ultima resposta 8 de abr. de 2013
Respostas 9
Participantes 6