JPA & Hibernate - Unable to build Hibernate SessionFactory

Olá Pessoal,

Quando vou inserir um objeto no banco de dados eu tomo o erro : Unable to build Hibernate SessionFactory

Acho que o problema seja no mapeamento, pois já olhei o persistence.xml e está ok…

Classe de TipoPessoa :

@Entity
@Table(name=“TB_TIPO_PESSOA”)
public class TipoPessoa {

@Id
@Column(name="id_tipo_pessoa")
private String id;
private String tipoPessoa;
@Transient
private List<Cliente> cliente;

public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}
public String getTipoPessoa() {
    return tipoPessoa;
}
public void setTipoPessoa(String tipoPessoa) {
    this.tipoPessoa = tipoPessoa;
}
public List<Cliente> getCliente() {
    return cliente;
}
public void setCliente(List<Cliente> cliente) {
    this.cliente = cliente;
}

}

Classe Cliente :

@Entity
@Table(name=“TB_CLIENTE”)
public class Cliente {

@Id
@GeneratedValue
private int id;
private String nomeFantasia;
private String razaoSocial;
@Column(nullable=false)
private String registro;
private String logradouro;
private String numero;
private String bairro;
private String cidade;
private String pais;
private String estado;
@ColumnDefault("TRUE")
private boolean ativo;
private String cep;
@JoinColumn(name="id_tipo_pessoa")
@OneToMany
private TipoPessoa tipoPessoa;


public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}
public String getNomeFantasia() {
    return nomeFantasia;
}
public void setNomeFantasia(String nomeFantasia) {
    this.nomeFantasia = nomeFantasia;
}
public String getRazaoSocial() {
    return razaoSocial;
}
public void setRazaoSocial(String razaoSocial) {
    this.razaoSocial = razaoSocial;
}
public String getRegistro() {
    return registro;
}
public void setRegistro(String registro) {
    this.registro = registro;
}
public String getLogradouro() {
    return logradouro;
}
public void setLogradouro(String logradouro) {
    this.logradouro = logradouro;
}
public String getNumero() {
    return numero;
}
public void setNumero(String numero) {
    this.numero = numero;
}
public String getBairro() {
    return bairro;
}
public void setBairro(String bairro) {
    this.bairro = bairro;
}
public String getCidade() {
    return cidade;
}
public void setCidade(String cidade) {
    this.cidade = cidade;
}
public String getPais() {
    return pais;
}
public void setPais(String pais) {
    this.pais = pais;
}
public String getEstado() {
    return estado;
}
public void setEstado(String estado) {
    this.estado = estado;
}
public boolean isAtivo() {
    return ativo;
}
public void setAtivo(boolean ativo) {
    this.ativo = ativo;
}
public String getCep() {
    return cep;
}
public void setCep(String cep) {
    this.cep = cep;
}
public TipoPessoa getTipoPessoa() {
    return tipoPessoa;
}
public void setTipoPessoa(TipoPessoa tipoPessoa) {
    this.tipoPessoa = tipoPessoa;
}

}

Classe de insert (GenericDAO) :

public class GenericDAO {

Logger logger = Logger.getLogger(this.getClass().getSimpleName());

public GenericDAO() {
    logger.debug("Carregando a classe de " + this.getClass().getSimpleName());
}

public void insert(Object obj) {

    logger.debug("Inserindo Objeto " + obj.getClass() + " através da Classe " + this.getClass().getSimpleName());

    EntityManager manager = new ConnectionFactory().createEntityHibernate();
    manager.getTransaction().begin();
    manager.persist(obj);
    manager.getTransaction().commit();

    manager.close();
}   

}

Main :
TipoPessoa tp1 = new TipoPessoa();
TipoPessoa tp2 = new TipoPessoa();
GenericDAO gdao = new GenericDAO();

    tp1.setId("PF");
    tp1.setTipoPessoa("PESSOA FÍSICA");
    
    tp2.setId("PJ");
    tp2.setTipoPessoa("PESSOA JURÍDICA");
    
    gdao.insert(tp1);
    gdao.insert(tp2);

ERRO :

Exception in thread “main” javax.persistence.PersistenceException: [PersistenceUnit: wacf] Unable to build Hibernate SessionFactory
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.persistenceException(EntityManagerFactoryBuilderImpl.java:1249)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.access$600(EntityManagerFactoryBuilderImpl.java:120)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:860)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:425)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:849)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:75)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:54)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at br.com.wacf.controller.DAO.factory.ConnectionFactory.createEntityHibernate(ConnectionFactory.java:12)
at br.com.wacf.controller.DAO.GenericDAO.insert(GenericDAO.java:21)
at br.com.wacf.view.GeraTables.main(GeraTables.java:33)
Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: br.com.wacf.model.Cliente.tipoPessoa
at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:330)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1922)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:963)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:796)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3799)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1412)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1846)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:857)
… 10 more

Olá walteraragao, o erro ocorre porque você esta usando @OneToMany para mapear um atributo que não é uma coleção.
O relacionamento correto seria um @ManyToOne no atributo tipoPessoa na classe Cliente.