Herança no Hibernate + Annotations

Olá a todos,

Estou tentando usar herança no hibernate + annotations mais num ta rolando, ja olhei o tutorial e nada.

Tenho uma classe Pessoa é superclasse de Aluno e User. Na classe pessoa eu não defini o @Id, faço isto, pois as classes Aluno e User a PK não pode ser a mesma, uma trabalha sem autoincrement e a outra com autoincrement.

O erro aconteçe na hora em que eu vou gerar a base de dados, usando o SchemaExport, vejam:

Classe Pessoa.java

/**
 * 
 */
package br.com.sistema.model;

import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;



/**
 * Classe abstrata que representa individuos do sistema
 * @author Paulo Henrique Peres
 */
@Entity(access=AccessType.FIELD)
@Table(name="Pessoa")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE,		
		     discriminatorValue="Pessoa")
public abstract class Pessoa {
	
	/**
	 * Nome da Pessoa
	 */
	@Column(name="nome", nullable=false, length=50)
	private String nome;
	
	/**
	 * E-mail da Pessoa
	 */
	@Column(name="email", nullable=true, length=40)
	private String email;
	
	
	/**
	 * Seta o nome do pessoa
	 * @param nome
	 */
	public void setNome( String nome ){
		this.nome = nome;
	}
	
	/**
	 * Recupera o nome da pessoa
	 * @return
	 */
	public String getNome( ){
		return this.nome;
	}
	
	/**
	 * Seta o e-mail da pessoa
	 * @param email
	 */
	public void setEmail( String email ){
		this.email = email;
	}
	
	/**
	 * Recupera o e-mail da pessoa
	 * @return
	 */
	public String getEmail ( ){
		return this.email;
	}	
}

Classe Aluno.java

/**
 * 
 */
package br.com.sistema.model;

import java.util.Set;

import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.OneToMany;
import javax.persistence.Table;


/**
 * Classe que representa um aluno no sistema
 * @author Paulo Henrique Peres
 */
@Entity(access=AccessType.FIELD)
@Table(name="Aluno")
@Inheritance(discriminatorValue="PPessoa")
public class Aluno extends Pessoa {
	
	/**
	 * Matrícula acadêmica do Aluno
	 */
	@Id()
	private int matricula;
	
	/**
	 * Curso de graduação do Aluno
	 */
	@Column(name="curso", nullable=false, length=100)
	private String curso;
	
	/**
	 * Seta a matrícula acadêmica do aluno
	 * @param matricula
	 */
	public void setMatricula ( int matricula ){
		this.matricula = matricula;
	}
	
	@OneToMany(mappedBy="Aluno")
	private Set<Frequencia> frequencias;
	
	/**
	 * Recupera a matrícula acadêmica do aluno
	 * @return
	 */
	public int getMatricula ( ){
		return this.matricula;
	}
	
	/**
	 * Seta o curso do aluno
	 * @param curso
	 */
	public void setCurso ( String curso ){
		this.curso = curso;
	}
	
	/**
	 * Recupera o curso do aluno
	 * @return
	 */
	public String getCurso ( ){
		return this.curso;
	}
}

Classe User.java

/**
 * 
 */
package br.com.sistema.model;

import javax.persistence.AccessType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratorType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

/**
 * Classe que representa um usuário do sistema
 * @author Paulo Henrique Peres
 *
 */
@Entity(access=AccessType.FIELD)
@Table(name="User")
@SequenceGenerator(name="SEQ_USER", sequenceName="SEQ_USER")
@Inheritance(discriminatorValue="PPessoa")
public class User extends Pessoa {
	
	/**
	 * Id do Usuário
	 */
	@Id(generate=GeneratorType.SEQUENCE, generator="SEQ_USER")
	private int id;
	
	/**
	 * Login de entrada ao sistema
	 */
	@Column(name="login", nullable=false, length=20)
	private String login;
	
	/**
	 * Senha para entrada no sistema
	 */
	@Column(name="senha", nullable=false, length=20)
	private String senha;
	
	/**
	 * Seta o id do usuário
	 * @param id
	 */
	public void setId ( int id ){
		this.id = id;
	}
	
	/** 
	 * Recupera o id do usuário
	 * @return
	 */
	public int getId ( ){
		return this.id;
	}
	
	/**
	 * Seta o login do usuário
	 * @param login
	 */
	public void setLogin ( String login ){
		this.login = login;
	}
	
	/**
	 * Recupera o login do usuário
	 * @return
	 */
	public String getLogin ( ){
		return this.login;
	}
	
	/**
	 * Seta a senha do usuário
	 * @param senha
	 */
	public void setSenha ( String senha ){
		this.senha = senha;
	}
	
	/**
	 * Recupera a senha do usuário
	 * @return
	 */
	public String getSenha ( ){
		return this.senha;
	}
}

E o erro na hora de criar as tabelas:


java.lang.NullPointerException
	at org.hibernate.mapping.PersistentClass.createPrimaryKey(PersistentClass.java:283)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:464)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:177)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:999)
	at br.com.sistema.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:27)
	at br.com.sistema.action.CadastraAluno.<init>(CadastraAluno.java:21)
	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 java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at com.opensymphony.xwork.ObjectFactory.buildBean(ObjectFactory.java:107)
	at com.opensymphony.xwork.ObjectFactory.buildAction(ObjectFactory.java:87)
	at com.opensymphony.xwork.config.providers.XmlConfigurationProvider.addAction(XmlConfigurationProvider.java:168)
	at com.opensymphony.xwork.config.providers.XmlConfigurationProvider.addPackage(XmlConfigurationProvider.java:228)
	at com.opensymphony.xwork.config.providers.XmlConfigurationProvider.loadConfigurationFile(XmlConfigurationProvider.java:567)
	at com.opensymphony.xwork.config.providers.XmlConfigurationProvider.init(XmlConfigurationProvider.java:124)
	at com.opensymphony.xwork.config.impl.DefaultConfiguration.reload(DefaultConfiguration.java:85)
	at com.opensymphony.xwork.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:56)
	at com.opensymphony.xwork.DefaultActionProxyFactory.setupConfigIfActionIsCommand(DefaultActionProxyFactory.java:58)
	at com.opensymphony.xwork.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:43)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:270)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)
11:37:38,359 ERROR SchemaUpdate: could not complete schema update
org.hibernate.AnnotationException: Use of the same entity name twice: Pessoa
	at org.hibernate.cfg.annotations.EntityBinder.bindEntity(EntityBinder.java:177)
	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:389)
	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:177)
	at org.hibernate.cfg.Configuration.generateSchemaUpdateScript(Configuration.java:732)
	at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:135)
	at br.com.sistema.hibernate.HibernateUtil.generateDataBase(HibernateUtil.java:53)
	at br.com.sistema.action.CadastraAluno.execute(CadastraAluno.java:24)
	at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:283)
	at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:166)
	at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
	at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Unknown Source)

Atenciosamente,

Paulo Henrique Peres