Unable to define/override @Id(s) on a subclass

Alguém saberia que erro é esse?

22/08/2007 14:39:55 org.hibernate.cfg.annotations.Version <clinit>
INFO: Hibernate Annotations 3.3.0.GA
22/08/2007 14:39:56 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
22/08/2007 14:39:56 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
22/08/2007 14:39:56 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
22/08/2007 14:39:56 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
22/08/2007 14:39:56 org.hibernate.ejb.Version <clinit>
INFO: Hibernate EntityManager 3.3.1.GA
22/08/2007 14:39:57 org.hibernate.cfg.AnnotationBinder bindClass
INFO: Binding entity from annotated class: modelo.Endereco
22/08/2007 14:39:57 org.hibernate.cfg.annotations.EntityBinder bindTable
INFO: Bind entity modelo.Endereco on table Endereco
22/08/2007 14:39:57 org.hibernate.cfg.AnnotationBinder bindClass
INFO: Binding entity from annotated class: modelo.PessoaFisica
22/08/2007 14:39:57 org.hibernate.cfg.annotations.EntityBinder bindTable
INFO: Bind entity modelo.PessoaFisica on table pessoa_fisica
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: org.hibernate.AnnotationException: Unable to define/override @Id(s) on a subclass: modelo.PessoaFisica
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:258)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:51)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
	at modelo.DAO.PessoaFisicaDAO.novoCadastro(PessoaFisicaDAO.java:20)
	at controle.ControlePessoaFisica.actionPerformed(ControlePessoaFisica.java:80)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(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: org.hibernate.AnnotationException: Unable to define/override @Id(s) on a subclass: modelo.PessoaFisica
	at org.hibernate.cfg.AnnotationBinder.bindId(AnnotationBinder.java:1757)
	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1229)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:733)
	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:498)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:277)
	at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1115)
	at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1269)
	at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:150)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:888)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:186)
	at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:246)

Provavelmente você já definiu um @Id para a superclasse de PessoaFisica, e está tentando definir outro na subclasse.

Não posso fazer isso??

devo ter feito algo errado então, se puder me ajudar
tenho 3 tabelas, vou resumir ao principal de cada tabela

pessoa_fisica
id -> chave primária
nome
formacao

pessoa_juridica
id -> chave primária
nome
cnpj

endereco
id -> chave primária
logradouro
cidade

seria interessante eu colocar em endereco uma chave estrangeira? id_pessoa_fisica e id_pessoa_juridica?

ou colocar em cada pessoa uma chave estrangeira de endereco?

Ai eh modelagem de dados, o que parece mais logico para vc, que cada endereco possua uma pessoa fisica E/OU pessoa juridica?! ou que cada pessoa juridica e pessoa fisica possua um endereco?

acho que a segunda opcao, entao o endereco vai como chave extrangeira de pessoa fisica e juridica

:wink:

Uma opção seria você fazer algo assim:

@Entity public class Endereco{ @Id private int id; private String logradouro; private String cidade; }

@MappedSuperclass public class Pessoa{ @Id private int id; private String nome; @ManyToOne @JoinColumn(name="id_endereco") private Endereco endereco; }

@Entity public class PessoaFisica extends Pessoa{ private String formacao; }

@Entity public class PessoaJuridica extends Pessoa{ private String cnpj; }

Não testei esse mapeamento, portanto, não sei se tem algum erro, mas o caminho é mais ou menos esse.