Hibernate não salva dependências do objeto

Olá a todos,

Tenho o seguinte problema, possuo um objeto chamado Pessoas e outros chamados PessoaFisica, PessoaJuridica.

Quando instancio pessoa e mando salvar, ele não salva por exemplo o objeto PessoaFisica que está declaro em Pessoa. Creio que alguma de minhas annotations estão erradas.

Segue minhas classes.

Objeto Pessoa Física

@Entity
@Table(name = "pessoa_fisica")
public class PessoaFisica {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "pessoa_fisica_id")
	private int pessoaFisicaId;
	
	@OneToOne
	@JoinColumn(name = "pessoa_id")
	private Pessoa pessoa;
	
	@OneToOne(optional = true, mappedBy = "pessoaFisica")
	private Usuario usuario;
	
	@Column(name = "sexo")
	private boolean sexo;
	
	@Column(name = "data_nascimento")
	private Date dataNascimento;
	
	@Column(name = "cpf")
	private String cpf;
	
	@Column(name = "rg")
	private String rg;
	
	@Column(name = "telefone_residencial")
	private String telefoneResidencial;
	
	@Column(name = "telefone_celular")
	private String telefoneCelular;
	
	@Column(name = "telefone_empresa")
	private String telefoneEmpresa;
	
	@Column(name = "usuario_sistema")
	private boolean usuarioSistema = false;

Objeto Pessoa

@Entity
@Table(name = "pessoa")
public class Pessoa {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "pessoa_id")
	private int pessoaId;
	
	@OneToOne(optional = true, mappedBy = "pessoa", cascade = CascadeType.ALL)
	private PessoaFisica pessoaFisica;
	
	@OneToOne(optional = true, mappedBy = "pessoa", cascade = CascadeType.ALL)
	@JoinColumn(name = "pessoa_id")
	private PessoaJuridica pessoaJuridica;

	@OneToOne
	@JoinColumn(name = "adm_cadastro_id")
	private Pessoa admCadastro;
	
	@Column(name = "tipo_pessoa")
	private String pessoaTipo;
	
	@Column(name = "nome")
	private String nome;
	
	@Temporal(TemporalType.DATE)
	@DateTimeFormat(pattern = "dd/MM/yyyy")
	@Column(name = "data_cadastro")
	private Date dataCadastro = new Date();
	
	@Temporal(TemporalType.TIME)
	@Column(name = "hora_cadastro")
	private Date horaCadastro = new Date();
	
	@Column(name = "email")
	private String email;
	
	@Column(name = "observacao")
	private String observacao;
	
	@Column(name = "suporte")
	private String suporte;
	
	@Column(name = "ativo")
	private boolean ativo;

`public class Pessoa implements Serializable

public class PessoaFisica extends Pessoa

public class PessoaJuridica extends Pessoa

retira o id de PessoFisica e PessoaJuridica
`

Eu havia feito dessa forma com Herença mas tive problemas. Tenho Pessoa > Pessoa Física > Usuário, minhas classes ficaram iguais a abaixo, mas está dando erro relacionado ao Usuário.

Meu banco de dados:

Classe Pessoa

@Entity
@Table(name = "pessoa")
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa {

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "pessoa_id")
	private int pessoaId;
	
	@OneToOne(optional = true, cascade = CascadeType.ALL)
	@JoinColumn(name = "pessoa_id")
	private PessoaFisica pessoaFisica;
	
	@OneToOne(optional = true, cascade = CascadeType.ALL)
	@JoinColumn(name = "pessoa_id")
	private PessoaJuridica pessoaJuridica;

Classe Pessoa Fisica

@Entity
@Table(name = "pessoa_fisica")
@PrimaryKeyJoinColumn(name = "pessoa_id")
@Inheritance(strategy = InheritanceType.JOINED)
public class PessoaFisica extends Pessoa {
	
	@OneToOne(optional = true, cascade = CascadeType.ALL)
	@JoinColumn(name = "pessoa_fisica_id")
	private Usuario usuario;

Classe Usuário

@Entity
@Table(name = "usuario")
@PrimaryKeyJoinColumn(name = "pessoa_fisica_id")
public class Usuario extends PessoaFisica {

	@Column(name = "ativo")
	private boolean ativo;
	
	@Column(name = "login")
	private String login;
	
	@Column(name = "senha")
	private String senha;