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

8 respostas
A

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

8 Respostas

H

Verifique as versões das bibliotecas.

Deve ter alguma versão desatualizada aí.

A

Hebert Coelho:
Verifique as versões das bibliotecas.

Deve ter alguma versão desatualizada aí.

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

H

Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

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

A
Hebert Coelho:
Não tenha medo de ler o stack trace.

A causa do problema estava bem no final dela:

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

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

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

<?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>
        <![CDATA[ <?xml version="1.0" encoding="ISO-8859-1" ?> ]]>
    </jsp:text>
    <jsp:text>
        <![CDATA[ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> ]]>
    </jsp:text>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Cadastro de time</title>
</head>
<body>
<f:view>
		<center>
			<h:form>
			
				<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>
</body>
</html>
</jsp:root>

Att, André Vieira

R

Andr?de Souza Vieira:
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?

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.

A

rock:
Andr?de Souza Vieira:
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?

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.

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

A

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

R

Andr?de Souza Vieira:
rock:
Andr?de Souza Vieira:
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?

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.

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

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:

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.

: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/

Criado 23 de setembro de 2012
Ultima resposta 24 de set. de 2012
Respostas 8
Participantes 3