Problemas com salvar

Boa noite eu estou passando pela seguinte situação:
Tenho uma classe Pessoa e a partir dela extendem PessoaFisica e PessoaJuridica. Quando eu tento salvar pessoa a partir do meu DAO. Eu consigo salvar apenas os dados de pessoa. Alguém poderá me ajudar ?.
Abaixo segue as minhas classes e a estrutura das camadas.

[code]@Entity
@Inheritance(strategy= InheritanceType.JOINED)
public class Pessoa implements Serializable{

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;

@OneToMany(mappedBy = "pessoa")
private List<Endereco> enderecos;

@OneToMany(mappedBy = "pessoa")
private List<Telefone> telefones;

private String email;
 
@OneToMany(mappedBy = "pessoa")
private List<Autorizacao> roles;

@OneToMany(mappedBy = "pessoa")
private List<Documento> documentos;

private Boolean ativo = true;[/code]

[code]@Entity
public class PessoaFisica extends Pessoa {

private static final long serialVersionUID = 1L;

@Column(length = 60)
private String pai;
 
@Column(length = 60, nullable = false)
private String mae;

@Column(length = 30, nullable = false)
private String naturalidade;
 
@Column(length = 60, nullable = false)
private String nome;
 
@Enumerated(EnumType.STRING)
@Column(nullable = false)	
private EstadoCivil estadoCivil;
 
@Column(length = 1, nullable = false)
private String sexo;[/code]
@Entity
public class PessoaJuridica extends Pessoa {
 
	private static final long serialVersionUID = 1L;

	@Column(length = 60, nullable = false)	
	private String nomeFantasia;

	@Column(length = 60, nullable = false)
	private String razaoSocial;
	
	@Column(length = 60, nullable = false, unique = true)	 
	private String cnpj;
	
	
	//========================GETTR'S AND SETTER'S=================//
public class PessoaDAOJPA extends GenericDAO<Pessoa, Integer> implements
		PessoaDAO {

	private static final long serialVersionUID = 1L;

	@Override
	public Pessoa salvar(Pessoa pessoa) {
		 return super.save(pessoa);
	}
@Stateless
public class PessoaServiceImp implements PessoaService, Serializable {

	private static final long serialVersionUID = 1L;

	private static final Logger logger = Logger.getLogger(Pessoa.class);	
	
	@Inject
	private PessoaDAO pessoaDAO;
	
	
	@Override
	public Pessoa salvar(Pessoa pessoa) throws EntityAlreadException {
		//Busca uma Pessoa já cadastrada
		Pessoa result = pessoaDAO.pesquisarPessoa(pessoa, true);
		if(result != null){
			String mensagem = "Pessoa já existe no sistema";
			logger.warn(mensagem);
			throw new EntityAlreadException(mensagem);
		}
		return  pessoaDAO.salvar(pessoa);
	}
@ViewScoped
@ManagedBean(name = "funcionarioController")
public class FuncionarioController {

	private String parametroPesquisa;
	
	private PessoaFisica funcionarioCorrente;
	
	private List<PessoaFisica> listaDePessoaFuncionario;

	/**Injecoes**/
	@EJB
	private PessoaService pessoaService;

	public void salvarFuncionario(){
		try {
			funcionarioCorrente.addEnderecos(endereco);
			pessoaService.salvar(funcionarioCorrente);
		} catch (Exception e) {

		}
	}

eai man, acho que você deve ter controle onde vc deve verificar o tipo de pessoa e direcionala para o seu respectivo metodo .

Está salvando só Pessoa, pq vc ta dando um Save em somente uma entidade Pessoa…

Se vc pegar e fazer um new PessoaFisica(); e salvar ele, ai vc tera um objeto PessoaFisica salvo…