Erro na persistencia hibernate / mysql

2 respostas
carifu

pessoal estou fazendo uma aplicação desktop mas não estou conseguindo inserir no bd esta dando erro, este é o erro:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).

log4j:WARN Please initialize the log4j system properly.

Exception in thread main javax.persistence.PersistenceException: [PersistenceUnit: blabla] Unable to build EntityManagerFactory

at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:677)

at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:126)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:52)

at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:34)

at br.com.cmsinfo.infra.DAO.(DAO.java:21)

at br.com.cmsinfo.apresentacao.Teste.main(Teste.java:14)

Caused by: org.hibernate.MappingException: Could not determine type for: br.com.cmsinfo.comum.Cliente, at table: OrdemDeServico, for columns: [org.hibernate.mapping.Column(cliente)]

at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:292)

at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:276)

at org.hibernate.mapping.Property.isValid(Property.java:207)

at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:458)

at org.hibernate.mapping.RootClass.validate(RootClass.java:215)

at org.hibernate.cfg.Configuration.validate(Configuration.java:1135)

at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1320)

at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:867)

at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:669)

 5 more

e este é meu persistence.xml:

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



org.hibernate.ejb.HibernatePersistence
br.com.cmsinfo.comum.Entidade
br.com.cmsinfo.comum.Cliente
br.com.cmsinfo.comum.Fornecedor
br.com.cmsinfo.comum.Funcionario
br.com.cmsinfo.comum.Produto
br.com.cmsinfo.comum.OrdemDeServico
true











por favor alguém me ajude estou tentando a algum tempo resolver isso e não estou conseguindo

2 Respostas

Andre_Brito

Isso pode ser várias coisas.

  • Seu username e password do banco de dados estão corretos?
  • Você starta o banco de dados antes de executar o código? Algumas vezes é necessário fazer isso… Eu geralmente executo o mysql -u root, dou um use nomedobanco e tá na mão. Já funciona.
  • Você está usando JBoss ou algum CMT? EJB? Se não, tente tirar o transaction-type=“RESOURCE_LOCAL” do persistence.
  • O nome do seu banco de dados é cmsinfo mesmo?

Nos mostre onde você cria um EntityManager.

Editado:
Opa, acho que o buraco é mais embaixo.
Veja essa linha:

Tem alguma relação entre OrdemDeServico e Cliente, certo? Você pode nos mostrar essa relação? Se é OneToOne, OneToMany ou coisa do tipo.

carifu

esta é minha classe OrdemDeServico :

package br.com.cmsinfo.comum;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

import javax.persistence.ManyToMany;

import javax.persistence.ManyToOne;

@Entity
public class OrdemDeServico implements Entidade {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long codigo;

@ManyToOne(cascade=CascadeType.PERSIST)
private Cliente cliente;

@ManyToMany(mappedBy ="OrdemDeServico", cascade=CascadeType.PERSIST)
private List<Funcionario> funcionario;

public List<Funcionario> getfuncionario() {
	if (funcionario == null) {
		funcionario = new ArrayList<Funcionario>();
	}
	return funcionario;
}



public Long getCodigo() {
	return codigo;
}

public void setCodigo(Long codigo) {
	this.codigo = codigo;
}

public Cliente getCliente() {
	return cliente;
}

public void setCliente(Cliente cliente) {
	this.cliente = cliente;
}

}

esta é minha classe Cliente:

package br.com.cmsinfo.comum;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import <a href="http://javax.persistence.Id">javax.persistence.Id</a>;

import javax.persistence.OneToMany;

@Entity
@org.hibernate.annotations.Entity
public class Cliente implements Entidade{

@Id
@GeneratedValue (strategy=GenerationType.IDENTITY)
private Long codigo;

@Column(nullable=false)
private String nome;

@Column(nullable=false)
private String endereco;

@Column(nullable=false)
private Long telefone;

private ArrayList<OrdemDeServico> OrdemdeServico;

@SuppressWarnings("unused")
@OneToMany(mappedBy = "Cliente", cascade =CascadeType.PERSIST)
private List<OrdemDeServico> OrdedeServico;

public List<OrdemDeServico> getOrdemdeServico() {
	if (OrdemdeServico == null) {
		OrdemdeServico = new ArrayList<OrdemDeServico>();
	}
	return OrdemdeServico;
}

public Long getCodigo() {
	return codigo;
}

public void setCodigo(Long codigo) {
	this.codigo = codigo;
}

public String getNome() {
	return nome;
}

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

public String getEndereco() {
	return endereco;
}

public void setEndereco(String endereco) {
	this.endereco = endereco;
}

public Long getTelefone() {
	return telefone;
}

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

}

esta é minha classe DAO :

package br.com.cmsinfo.infra;

import java.util.List;

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.EntityTransaction;

import javax.persistence.Persistence;

import javax.persistence.Query;

import br.com.cmsinfo.comum.Entidade;
import br.com.cmsinfo.comum.InfraException;

public class DAO {

private EntityManagerFactory fabrica;
private EntityManager gerente;
private EntityTransaction transacao;

public DAO(){
	fabrica =Persistence.createEntityManagerFactory("blabla");
	gerente=fabrica.createEntityManager();
}

public void incluir(Entidade entidade)throws InfraException{
	try{
	transacao=gerente.getTransaction();
	transacao.begin();
	gerente.persist(entidade);//insere atravez do metodo persist
	transacao.commit();
	
}catch (Exception e) {
        
	}

}

public void alterar(Entidade entidade)throws InfraException{
	try{
	transacao=gerente.getTransaction();
	transacao.begin();
	gerente.merge(entidade);//altera
	transacao.commit();
	
}catch (Exception e) {
	
	}

}
public void excluir(Entidade entidade)throws InfraException{
	
	try{
	transacao=gerente.getTransaction();
	transacao.begin();
	gerente.remove(gerente.merge(entidade));
	transacao.commit();//efetiva a transação co o bd
	}catch (Exception e) {
		
	}


}
@SuppressWarnings("unchecked")
public List<? extends Entidade> buscarTodos(Class<? extends Entidade> classe){
		String jpql= "select e from" + classe.getSimpleName() + " e ";
		Query consulta = gerente.createQuery(jpql);
		return consulta.getResultList();
	
}
public Entidade buscarPorCodigo(Class<? extends Entidade> classe, Number codigo){
	return gerente.find(classe, codigo);
	
}

}

meu já olhei refiz isso dai estou tentando resolver isso faz um tempo, estou quase desesperado kk
me ajudem ai por favor!

Criado 2 de dezembro de 2009
Ultima resposta 3 de dez. de 2009
Respostas 2
Participantes 2