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