Erro JPA [RESOLVIDO]

6 respostas
xivan

Estou com um problema na hora de dar um find no Usuario para alterá-lo. Alguém me ajuda?

javax.persistence.PersistenceException: org.hibernate.InstantiationException: No default constructor for entity: br.com.entity.Cidade
	at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:194)
	at br.com.service.UsuarioService.alterarUsuario(UsuarioService.java:66)
	at br.com.test.testUsuario.alterarUsuario(testUsuario.java:38)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.junit.internal.runners.TestMethodRunner.executeMethodBody(TestMethodRunner.java:99)
	at org.junit.internal.runners.TestMethodRunner.runUnprotected(TestMethodRunner.java:81)
	at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
	at org.junit.internal.runners.TestMethodRunner.runMethod(TestMethodRunner.java:75)
	at org.junit.internal.runners.TestMethodRunner.run(TestMethodRunner.java:45)
	at org.junit.internal.runners.TestClassMethodsRunner.invokeTestMethod(TestClassMethodsRunner.java:66)
	at org.junit.internal.runners.TestClassMethodsRunner.run(TestClassMethodsRunner.java:35)
	at org.junit.internal.runners.TestClassRunner$1.runUnprotected(TestClassRunner.java:42)
	at org.junit.internal.runners.BeforeAndAfterRunner.runProtected(BeforeAndAfterRunner.java:34)
	at org.junit.internal.runners.TestClassRunner.run(TestClassRunner.java:52)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
Caused by: org.hibernate.InstantiationException: No default constructor for entity: br.com.entity.Cidade
	at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:84)
	at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:100)
	at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:351)
	at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:3611)
	at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1275)
	at org.hibernate.impl.SessionImpl.instantiate(SessionImpl.java:1264)
	at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1299)
	at org.hibernate.loader.Loader.getRow(Loader.java:1206)
	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
	at org.hibernate.loader.Loader.doQuery(Loader.java:701)
	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
	at org.hibernate.loader.Loader.loadEntity(Loader.java:1860)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:48)
	at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:42)
	at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3049)
	at org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:399)
	at org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:375)
	at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:139)
	at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:195)
	at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103)
	at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:815)
	at org.hibernate.impl.SessionImpl.get(SessionImpl.java:808)
	at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:174)
	... 22 more

Classe Usuario

@Entity
@Table(name="int_usuario")
public class Usuario implements Serializable {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id", nullable = false)
	private Long id;

	@ManyToOne
	@JoinColumn(name = "int_cidade_id", referencedColumnName="id", 
			insertable = true, updatable = true)
	private Cidade cidade;
	
	@ManyToOne
	@JoinColumn(name = "int_papel_id", referencedColumnName="id")
	private Papel papel;
	
	@Column(name="nome", length=100)
	private String nome;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_nascimento")
	private Date datanascimento;
	
	@Column(name="telefone")
	private Integer telefone;
	
	@Column(name="celular")
	private Integer celular;
	
	@Column(name="email", length=100)
	private String email;
	
	@Column(name="usuario", length=100)
	private String usuario;
	
	@Column(name="senha")
	private String senha;
	
	@Column(name="cpf_cnpj", length=20)
	private String cpf_cnpj;
	
	@Column(name="logradouro", length=300)
	private String logradouro;
	
	@Column(name="bairro", length=100)
	private String bairro;
	
	@Column(name="cep", length=8)
	private Integer cep;
	
	@Column(name="proprietario")
	private Boolean proprietario;
	
	private static final long serialVersionUID = 1L;

	public Usuario() {
		super();
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Cidade getCidade() {
		return cidade;
	}

	public void setCidade(Cidade cidade) {
		this.cidade = cidade;
	}

	public Papel getPapel() {
		return papel;
	}

	public void setPapel(Papel papel) {
		this.papel = papel;
	}

	public String getNome() {
		return nome;
	}

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

	public Date getData_nascimento() {
		return datanascimento;
	}

	public void setDatanascimento(Date datanascimento) {
		this.datanascimento = datanascimento;
	}

	public Integer getTelefone() {
		return telefone;
	}

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

	public Integer getCelular() {
		return celular;
	}

	public void setCelular(Integer celular) {
		this.celular = celular;
	}

	public String getEmail() {
		return email;
	}

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

	public String getUsuario() {
		return usuario;
	}

	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getCpf_cnpj() {
		return cpf_cnpj;
	}

	public void setCpf_cnpj(String cpf_cnpj) {
		this.cpf_cnpj = cpf_cnpj;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public Integer getCep() {
		return cep;
	}

	public void setCep(Integer cep) {
		this.cep = cep;
	}

	public Boolean getProprietario() {
		return proprietario;
	}

	public void setProprietario(Boolean proprietario) {
		this.proprietario = proprietario;
	}

	public static long getSerialVersionUID() {
		return serialVersionUID;
	}

	
}

6 Respostas

bobfroes

Falta o construtor da entidade Cidade. “No default constructor for entity: br.com.entity.Cidade”.

Posta aí pra gente a Classe da entidade Cidade.

Retire o método super() do construtor da Classe Usuario.

Coloque o código fonte do seu programa no padrão usado por nós, para melhor entendermos o seu código.

xivan
@Entity
@Table(name="int_cidade")
public class Cidade implements Serializable {
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name="id", nullable = false)
	private Long id;

	@Column(name="nome", length=100)
	private String nome;
	
	@OneToOne
	@JoinColumn(name = "int_estado_id", referencedColumnName="id")
	private Estado estado;
		
	private static final long serialVersionUID = 1L;

	public Cidade(Long id_cidade) {
		super();
		this.id = id_cidade;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

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

	public static long getSerialVersionUID() {
		return serialVersionUID;
	}

	public Estado getEstado() {
		return estado;
	}

	public void setEstado(Estado estado) {
		this.estado = estado;
	}


}

Usuario Service Método Alterar

public void alterarUsuario(Long id, Long idcidade, Long idpepel, String nome,  String datanascimento,
			Integer telefone, Integer celular, String email, String usuario, String senha, 
			String cpf_cnpj, String logradouro, String bairro, Integer cep, 
			Boolean proprietario){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("Site");
		EntityManager em = emf.createEntityManager();
		
		Usuario u = (Usuario) em.find(Usuario.class, id);
		
		setValues(idcidade, idpepel, nome, datanascimento, telefone, celular, email, usuario, senha, cpf_cnpj, 
				logradouro, bairro, cep, proprietario, u);
		
		try{
			em.getTransaction().begin();
			em.merge(u);
			em.getTransaction().commit();
		}finally{
			em.close();
			emf.close();
		}
	}
Andre_Brito

xivan,

Se não sabe como fazer isso, leia isso. Vai ser muito mais fácil encontrar ajuda assim :slight_smile:

xivan

Arrumei!

AndreAlves

Cria o construtor padrão da classe Cidade:

public Cidade() {  
}
xivan

Valeu Funcionou!

Criado 13 de setembro de 2010
Ultima resposta 13 de set. de 2010
Respostas 6
Participantes 4