Como proceder a esse erro da java.lang.NoSuchMethodError?[Resolvido]

Boa Noite Caros!

Estou fazendo uma aplicação utilizando JEE+Hibernate com JPA+JSF, no entanto estou tento alguns problemas com o hibernate que pode ser visualizado abaixo:

java.lang.NoSuchMethodError: org.hibernate.cfg.Configuration.addAnnotatedClass(Ljava/lang/Class;)Lorg/hibernate/cfg/Configuration;

Aparece essa mensagem, o que fazer? Alguém já teve algum problema semelhante?

Muito Obrigado!

Att, André Vieira

Verifique as versões das bibliotecas.

Deve ter alguma versão desatualizada aí.

[quote=Hebert Coelho]Verifique as versões das bibliotecas.

Deve ter alguma versão desatualizada aí.[/quote]

Aconteceu o seguinte eu adicionei três bibliotecas que estavam faltando segundo o console Eclipse, como você pode ser nessa linha:

“26 [http-bio-8080-exec-9] INFO org.hibernate.cfg.Environment - HHH000206: hibernate.properties not found”

Então, adicionei várias bibliotecas, entretanto o erro inicial é esse:

“Unable to build EntityManagerFactory”, descrição completa está abaixo:

message javax.persistence.PersistenceException: [PersistenceUnit: futebol] Unable to build EntityManagerFactory

description The server encountered an internal error (javax.persistence.PersistenceException: [PersistenceUnit: futebol] Unable to build EntityManagerFactory) that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: javax.persistence.PersistenceException: [PersistenceUnit: futebol] Unable to build EntityManagerFactory
javax.faces.webapp.FacesServlet.service(FacesServlet.java:521)
root cause

javax.faces.el.EvaluationException: javax.persistence.PersistenceException: [PersistenceUnit: futebol] Unable to build EntityManagerFactory
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
root cause

javax.persistence.PersistenceException: [PersistenceUnit: futebol] Unable to build EntityManagerFactory
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
futebol.bean.TimeBean.cadastrarTime(TimeBean.java:22)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.el.parser.AstValue.invoke(AstValue.java:264)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)
root cause

org.hibernate.MappingException: Repeated column in mapping for entity: futebol.entities.JogadorEntity column: idade (should be mapped with insert=“false” update=“false”)
org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:682)
org.hibernate.mapping.PersistentClass.checkPropertyColumnDuplication(PersistentClass.java:704)
org.hibernate.mapping.PersistentClass.checkColumnDuplication(PersistentClass.java:726)
org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:479)
org.hibernate.mapping.RootClass.validate(RootClass.java:270)
org.hibernate.cfg.Configuration.validate(Configuration.java:1294)
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1738)
org.hibernate.ejb.EntityManagerFactoryImpl.(EntityManagerFactoryImpl.java:94)
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
futebol.bean.TimeBean.cadastrarTime(TimeBean.java:22)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.apache.el.parser.AstValue.invoke(AstValue.java:264)
org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
javax.faces.component.UICommand.broadcast(UICommand.java:315)
javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
javax.faces.webapp.FacesServlet.service(FacesServlet.java:508)

Você sabe como resolver isso?

Muito obrigado,

Att, André Vieira

Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

[quote]Repeated column in mapping for entity: futebol.entities.JogadorEntity column: idade (should be mapped with insert=“false” update=“false”)[/quote]Creio que esse é seu erro.

[quote=Hebert Coelho]Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

Está meio grego pra mim, o que devo fazer?

Vou colocar partes do códigos da aplicação:
// Entity //

package futebol.entities;

import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

@Entity
@Table(name="time")
public class TimeEntity {
	
	@Id @GeneratedValue
	private int id;
	
	@Column(name="nome", nullable=false)
	private String nome;
	
	@Column(name="apelido", nullable=false)
	private String apelido;
	
	@OneToMany
	List<JogadorEntity> jogador;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getApelido() {
		return apelido;
	}
	public void setApelido(String apelido) {
		this.apelido = apelido;
	}
	public List<JogadorEntity> getJogador() {
		return jogador;
	}
	public void setJogador(List<JogadorEntity> jogador) {
		this.jogador = jogador;
	}

}

// Repository //

package futebol.repository;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import futebol.bean.TimeBean;
import futebol.entities.TimeEntity;


public class TimeRepository {
	
	private EntityManager gerenciador;
	
	public TimeRepository(EntityManager gerenciador)
	{
		this.gerenciador = gerenciador;
	}
	public void adiciona(TimeEntity t)
	{
		this.gerenciador.persist(t);
	}
	public TimeBean busca(int id)
	{
		return this.gerenciador.find(TimeBean.class, id);
	}
	public List<TimeBean> buscaTodos()
	{
		Query query = this.gerenciador.createQuery("SELECT * FROM Time");
		return query.getResultList();
	}

}

// Bean //

[code]
package futebol.bean;

import java.io.Serializable;

import javax.faces.bean.ManagedBean;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import futebol.entities.TimeEntity;
import futebol.repository.TimeRepository;

@ManagedBean
public class TimeBean implements Serializable {

private static final long serialVersionUID = 1L;
private String nome;
private String apelido;

public void cadastrarTime() {
	EntityManagerFactory factory = Persistence
			.createEntityManagerFactory("futebol");
	try {
		TimeEntity time = new TimeEntity();
		time.setNome(nome);
		time.setApelido(apelido);

		EntityManager gerenciador = factory.createEntityManager();

		TimeRepository tr = new TimeRepository(gerenciador);

		gerenciador.getTransaction().begin();

		tr.adiciona(time);

		gerenciador.getTransaction().commit();

	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		factory.close();
	}
}

public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getApelido() {
	return apelido;
}

public void setApelido(String apelido) {
	this.apelido = apelido;
}

public static long getSerialversionuid() {
	return serialVersionUID;
}

}[/code]

// Persistence.xml //

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

<persistence version="2.0"
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
     
    <persistence-unit name="futebol" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/futebol"/>
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="" />
        </properties>
    </persistence-unit>
</persistence>

E a página XHTML

[code]

<?xml version="1.0" encoding="ISO-8859-1" ?>

<jsp:root xmlns:jsp=“http://java.sun.com/JSP/Page” xmlns:f=“http://java.sun.com/jsf/core” xmlns:h=“http://java.sun.com/jsf/html” version=“2.0”>
<jsp:directive.page language=“java”
contentType=“text/html; charset=ISO-8859-1” pageEncoding=“ISO-8859-1” />
jsp:text
]]>
</jsp:text>
jsp:text
<![CDATA[ ]]>
</jsp:text>

Cadastro de time
			<table>
				<caption colspan="2"><h3>Cadastro de time:</h3></caption>
				<tr>
					<td><h:outputLabel value="Nome:" for="txtNome" /></td>
					<td><h:inputText maxlength="50" value="#{timeBean.nome}" id="txtNome" /></td>
				</tr>
				<tr>
					<td><h:outputLabel value="Apelido:" for="txtApelido" /></td>
					<td><h:inputText maxlength="50" value="#{timeBean.apelido}" id="txtApelido" /></td>
				</tr>
				<tr>
					<td><h:commandButton value="Salvar Jogador" action="#{timeBean.cadastrarTime}" /></td>
				</tr>
			</table>	
		</h:form>
	</center>

</f:view>

[/code]

Att, André Vieira

[quote=Andr?de Souza Vieira][quote=Hebert Coelho]Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

Está meio grego pra mim, o que devo fazer?
[/quote]

grego? inglês é essencial em nossa área. Recomendo você estudar urgente.

Ali diz que há uma coluna repetida no mapeamento da entidade ‘JogadorEntity’.
:idea: Provavelmente você copiou o @Column(name=“idade”) para outro atributo.

[quote=rock][quote=Andr?de Souza Vieira][quote=Hebert Coelho]Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

Está meio grego pra mim, o que devo fazer?
[/quote]

grego? inglês é essencial em nossa área. Recomendo você estudar urgente.

Ali diz que há uma coluna repetida no mapeamento da entidade ‘JogadorEntity’.
:idea: Provavelmente você copiou o @Column(name=“idade”) para outro atributo.
[/quote]

Obrigado pela resposta, grego em relação a área específica…

[quote=Hebert Coelho]Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

Testei novamente e com ajuda do rock percebi que era isso mesmo, eu dupliquei a notação na entidade jogador,
curioso que isso estava numa classe que eu não estava utilizando, legal agora que eu sei que o hibernate mapea tudo antes de efetuar um CRUD.

Muito obrigado de sua ajuda, ela foi de grande valia.

Até mais,

att, André Vieira

[quote=Andr?de Souza Vieira][quote=rock][quote=Andr?de Souza Vieira][quote=Hebert Coelho]Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

Está meio grego pra mim, o que devo fazer?
[/quote]

grego? inglês é essencial em nossa área. Recomendo você estudar urgente.

Ali diz que há uma coluna repetida no mapeamento da entidade ‘JogadorEntity’.
:idea: Provavelmente você copiou o @Column(name=“idade”) para outro atributo.
[/quote]

Obrigado pela resposta, grego em relação a área específica…[/quote]

por nada :!:

Pensei que você estava se referindo ao inglês porque eu apenas traduzi.
Achei que a mensagem já estava bem clara, mas talvez estava clara para mim porque já cometi esse erro :roll:

[quote=Andr?de Souza Vieira]
Testei novamente e com ajuda do rock percebi que era isso mesmo, eu dupliquei a notação na entidade jogador,
curioso que isso estava numa classe que eu não estava utilizando, legal agora que eu sei que o hibernate mapea tudo antes de efetuar um CRUD.

Muito obrigado de sua ajuda, ela foi de grande valia. [/quote]

:smiley:

Isso, o hibernate pode validar tudo logo que vc inicia a aplicação.
Dá uma olhada no seu persistence.xml, provavelmente deve ter a seguinte propriedade:

<property name="hibernate.hbm2ddl.auto" value="validate"/>

Com isso, ele verifica os mapeamentos que vc fez nas entidades.

Podes, por exemplo, configurar para recriar a base também.


hibernate.hbm2ddl.auto = Automatically validates or exports schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly.
e.g. validate | update | create | create-drop
Comma-separated names of the optional files containing SQL DML statements executed during the SessionFactory creation. This is useful for testing or demoing: by adding INSERT statements for example you can populate your database with a minimal set of data when it is deployed.

Fonte: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/