Por que esse codigo JPA não funciona?

Pessoal segue o meu codigo:

[code]package pacote;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class TesteJPA {

public static void main(String[] args) {
	EntityManagerFactory factory = Persistence.createEntityManagerFactory("teste");
	EntityManager manager = factory.createEntityManager();
	
	ClientePessoaFisica fisica = new ClientePessoaFisica();
	fisica.setId(1);
	fisica.setCPF("123");
	
	manager.getTransaction().begin();
	manager.persist(fisica);
	manager.getTransaction().commit();
	
}

}
[/code]

[code]package pacote;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

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

@Id
@Column(name = "id")
protected Integer id;

@Column(name = "cliente_tipo_id")
protected Integer idTipo;

public Integer getId() {
	return id;
}

public void setId(Integer id) {
	this.id = id;
}

public Integer getIdTipo() {
	return idTipo;
}

}
[/code]

[code]package pacote;

import javax.persistence.Column;

public class ClientePessoaFisica extends Cliente {

public String getCPF() {
	return CPF;
}

public void setCPF(String cPF) {
	CPF = cPF;
}

public ClientePessoaFisica() {
	this.idTipo = 1; /* SENDO O ID DO TIPO PESSOA FISICA = 1 */
}

@Column(name = "identificador")
private String CPF;

}[/code]

[code]package pacote;

import javax.persistence.Column;

public class ClientePessoaFisica extends Cliente {

public String getCPF() {
	return CPF;
}

public void setCPF(String cPF) {
	CPF = cPF;
}

public ClientePessoaFisica() {
	this.idTipo = 1; /* SENDO O ID DO TIPO PESSOA FISICA = 1 */
}

@Column(name = "identificador")
private String CPF;

}[/code]

modelagem do meu banco:

[code]SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=‘TRADITIONAL’;

CREATE SCHEMA IF NOT EXISTS teste DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE teste ;


– Table teste.TipoCliente


CREATE TABLE IF NOT EXISTS teste.TipoCliente (
id INT NOT NULL AUTO_INCREMENT ,
descricao VARCHAR(45) NOT NULL ,
PRIMARY KEY (id) )
ENGINE = InnoDB;


– Table teste.Cliente


CREATE TABLE IF NOT EXISTS teste.Cliente (
id INT NOT NULL ,
identificador VARCHAR(45) NOT NULL ,
cliente_tipo_id INT NOT NULL ,
PRIMARY KEY (id) ,
INDEX fk_Cliente_TipoCliente (cliente_tipo_id ASC) ,
CONSTRAINT fk_Cliente_TipoCliente
FOREIGN KEY (cliente_tipo_id )
REFERENCES teste.TipoCliente (id )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
[/code]

STACK

[quote]log4j:WARN No appenders could be found for logger (org.jboss.logging).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread “main” java.lang.IllegalArgumentException: Unknown entity: pacote.ClientePessoaFisica
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:853)
at pacote.TesteJPA.main(TesteJPA.java:21)
[/quote]

Alguma ideia? :~

Dê uma olhada nesse link:

http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html

Repare a parte de mapping de herança… e reveja o seu codigo.

:wink:

Teu mapeamento está errado.

Unknown entity: pacote.ClientePessoaFisica

Tanto que a entidade ClientePessoaFisica não é considerada um entity.