Problemas em criar a session factory

Bom dia,

Eu estou tentando desenvolver uma aplicação utilizando o hibernate e tenho um pacote com as classes pessoa, pessoafisica, pessoajuridica,funcionario e cliente.

A hierarquia é a seguinte:

  • pessoa é a superclasse
  • cliente herda atributos de pessoa
  • funcionario herda atributos de pessoa
  • pessoafisica tem seus atributos proprios
  • pessoajuridica tem seus atributos proprios

Como existe herança eu criei um Pessoa.hbm.xml com o seguinte codigo:

[code]

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  

[/code]

Onde está o mapeamento dos atributos da superclasse pessoa e das classes filhas cliente e funcionario.

Depois criei um PessoaFisica.hbm.xml e um PessoaJuridica.hbm.xml para as respectivas classes pessoafisica e pessoa juridica

PessoaFisica.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

	<class name="Pessoa.pessoaFisica" table="pessoafisica"
		dynamic-insert="false" dynamic-update="false" mutable="true"
		optimistic-lock="version" polymorphism="implicit"
		select-before-update="false">
		<id name="codpessoa" column="codpessoa">
			<generator class=""></generator>
		</id>
		<property name="cpf"></property>
		<property name="pessoa_codpessoa"></property>
		<property name="cliente_codigocliente"></property>
		<property name="sexo"></property>
		<property name="datanasc"></property>
		<property name="rg"></property>
	</class>
</hibernate-mapping>

PessoaJuridica.hbm.xml

[code]

<?xml version="1.0"?>
<class name="Pessoa.pessoaJuridica" table="pessoajuridica"
	dynamic-insert="false" dynamic-update="false" mutable="true"
	optimistic-lock="version" polymorphism="implicit"
	select-before-update="false">
	<id name="codpessoa" column="codpessoa">
		<generator class=""></generator>
	</id>
	<property name="cnpj"></property>
	<property name="cliente_pessoa_codpessoa"></property>
	<property name="cliente_codigocliente"></property>
	<property name="inscestadual"></property>
</class>

[/code]

E por fim criei o cfg com os respectivos mapeamentos:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
    <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
    <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
    <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/BGN5</property>
    <property name="hibernate.connection.username">postgres</property>
    <property name="hibernate.connection.password">postgres</property>
    <property name="hibernate.show_sql">true</property>
    <mapping resource="Pessoa/Pessoa.hbm.xml"/><mapping resource="Pessoa/PessoaFisica.hbm.xml" />
    <mapping resource="Pessoa/PessoaJuridica.hbm.xml" />


  </session-factory>
</hibernate-configuration>

Porém quando eu tento criar o session, o eclipse me retorna o seguinte erro:

405 [AWT-EventQueue-0] INFO cfg.Configuration  - Reading mappings from resource : Pessoa/Pessoa.hbm.xml
607 [AWT-EventQueue-0] INFO cfg.HbmBinder  - Mapping class: Pessoa.pessoa -> pessoa
745 [AWT-EventQueue-0] INFO cfg.HbmBinder  - Mapping joined-subclass: Pessoa.cliente -> cliente
752 [AWT-EventQueue-0] INFO cfg.HbmBinder  - Mapping joined-subclass: Pessoa.funcionario -> funcionario
754 [AWT-EventQueue-0] INFO cfg.Configuration  - Reading mappings from resource : Pessoa/PessoaFisica.hbm.xml
822 [AWT-EventQueue-0] INFO cfg.HbmBinder  - Mapping class: Pessoa.pessoaFisica -> pessoafisica
A criação da SessionFactory inicial falhou.org.hibernate.InvalidMappingException: Could not parse mapping document from resource Pessoa/PessoaFisica.hbm.xml
java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.eclipse.ve.internal.java.vce.launcher.remotevm.JFCLauncher$1.run(JFCLauncher.java:59)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
	at java.awt.EventQueue.access$000(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.awt.EventQueue$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.lang.ExceptionInInitializerError
	at Util.CriarSessionFactory.<clinit>(CriarSessionFactory.java:18)
	at DAO.DAOPF.<init>(DAOPF.java:18)
	at Controle.controleClientePF.<init>(controleClientePF.java:58)
	at visao.CadastroPF.<init>(CadastroPF.java:76)
	... 19 more
Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from resource Pessoa/PessoaFisica.hbm.xml
	at org.hibernate.cfg.Configuration.addResource(Configuration.java:569)
	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1587)
	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
	at org.hibernate.cfg.Configuration.configure(Configuration.java:1414)
	at Util.CriarSessionFactory.<clinit>(CriarSessionFactory.java:15)
	... 22 more
Caused by: org.hibernate.PropertyNotFoundException: field [codpessoa] not found on Pessoa.pessoaFisica
	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:122)
	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:114)
	at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:137)
	at org.hibernate.util.ReflectHelper.getter(ReflectHelper.java:83)
	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:71)
	at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)
	at org.hibernate.cfg.HbmBinder.bindSimpleId(HbmBinder.java:401)
	at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:334)
	at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:273)
	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:144)
	at org.hibernate.cfg.Configuration.add(Configuration.java:669)
	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:504)
	at org.hibernate.cfg.Configuration.addResource(Configuration.java:566)
IWAV0052E Invocation Target Exception creating visao.CadastroPF
	... 29 more

O que está causando esse erro?? No meu SQL eu tenho o campo codpessoa que receberá o auto incremento…se alguem puder me ajudar agradeço.

Abraço

Carlos

Você criou o campo codpessoa tanto no banco de dados quanto na sua entidade?

field [codpessoa] not found on Pessoa.pessoaFisica

[quote=faelbsr]Você criou o campo codpessoa tanto no banco de dados quanto na sua entidade?

field [codpessoa] not found on Pessoa.pessoaFisica[/quote]

Criei sim falebsr

package Pessoa;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
import org.hibernate.annotations.Entity;

@Entity
@SequenceGenerator(name = "codpessoa",sequenceName = "codpessoa", initialValue =1)  
public class pessoa implements Serializable{
	@Id   
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "codpessoa")   
    @Column(name = "codpessoa", unique=true)  
	private String nome, logradouro, complemento, bairro, telefone,uf, cidade, cep, email;
	private int numero, codpessoa;
	
	public pessoa() {
		super();
		// TODO Auto-generated constructor stub
	}

	public pessoa(String nome, String logradouro, String complemento,
			String bairro, String telefone, String uf, String cidade,
			String cep, String email, int numero, int codpessoa) {
		super();
		this.nome = nome;
		this.logradouro = logradouro;
		this.complemento = complemento;
		this.bairro = bairro;
		this.telefone = telefone;
		this.uf = uf;
		this.cidade = cidade;
		this.cep = cep;
		this.email = email;
		this.numero = numero;
		this.codpessoa = codpessoa;
		}

	public String getNome() {
		return nome;
	}

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

	public String getLogradouro() {
		return logradouro;
	}

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

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getBairro() {
		return bairro;
	}

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

	public String getTelefone() {
		return telefone;
	}

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

	public String getUf() {
		return uf;
	}

	public void setUf(String uf) {
		this.uf = uf;
	}

	public String getCidade() {
		return cidade;
	}

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

	public String getCep() {
		return cep;
	}

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

	public String getEmail() {
		return email;
	}

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

	public int getNumero() {
		return numero;
	}

	public void setNumero(int numero) {
		this.numero = numero;
	}

	public int getCodpessoa() {
		return codpessoa;
	}

	public void setCodpessoa(int codpessoa) {
		this.codpessoa = codpessoa;
	}
	
}

Ok cara… eu realmente não sei se é uma boa prática a mistura de mapeamento xml com anotação, eu faço tudo com anotação.

Vou te dar uma ideia ai que você pode tentar mas não sei se vai funcionar pois esta conclusão eu tirei só de olho…

Toque


@Entity  
@SequenceGenerator(name = "codpessoa",sequenceName = "codpessoa", initialValue =1)    
public class pessoa implements Serializable{  
    @Id     
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "codpessoa")     
    @Column(name = "codpessoa", unique=true)    
    private String nome, logradouro, complemento, bairro, telefone,uf, cidade, cep, email;  
    private int numero, codpessoa;  

//...

por isso


@Entity  
@SequenceGenerator(name = "codpessoa",sequenceName = "codpessoa", initialValue =1)    
public class pessoa implements Serializable{  
    
    @Id     
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "codpessoa")     
    @Column(name = "codpessoa", unique=true)    
    private int codpessoa;

    private String nome, logradouro, complemento, bairro, telefone,uf, cidade, cep, email;  

    private codpessoa;  

Putz…mesmo alterando isso não funcionou…valeu pela dica de qq forma.