Usando @MappedSuperclass para gerar chave primaria para outras Entidades

Estou tendo um problema usando uma classe que é Generica para outras classes, nessa classe ela é tem apenas um atributo que é o “Código” que também é a chave estrangeira de outras classes. Mas esse código quando é gerado ele é sequencial para todas as classes por exemplo: Quando eu salvo um funcionário que extends a minha Classe Generica que tem o “Código”, ele salva como código 1, Ai quando eu salvo um usuário que também extends a minha classe Generica, ele salva como 2, mas o certo era ele salvar como 1 ja que era o primeiro registro do usuario. Estou usando @MappedSuperclass, segue o codigo abaixo.

`@SuppressWarnings("serial")
@MappedSuperclass
public class GenericEntidade implements Serializable {
@Id
	@GeneratedValue (strategy = GenerationType.AUTO)
private Long codigo;
   public Long getCodigo() {
		return codigo;
	}
public void setCodigo(Long codigo) {
		this.codigo = codigo;
	}
}
//------- Classe Funcionario----
@SuppressWarnings("serial")
@Entity
public class Funcionario extends GenericEntidade {
	@Column(length = 20)
	private String carteiraTrabalho;
	@Temporal(TemporalType.DATE)
	@Column(nullable = false)
	private Date dataAdmissao;
	@OneToOne
	@JoinColumn(nullable = false)
	private Pessoa pessoa;
	public String getCarteiraTrabalho() {
		return carteiraTrabalho;
	}
	public void setCarteiraTrabalho(String carteiraTrabalho) {
		this.carteiraTrabalho = carteiraTrabalho;
	}
	public Date getDataAdmissao() {
	return dataAdmissao;
	}
	public void setDataAdmissao(Date dataAdmissao) {
		this.dataAdmissao = dataAdmissao;
	}
	public Pessoa getPessoa() {
		return pessoa;
	}
	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}
}
//-------- Minha classe Usuario
@SuppressWarnings("serial")
@Entity
public class Usuario extends GenericEntidade {
	@Column(length = 32, nullable = false)
	private String senha;
	@Column(nullable = false)
	private Character tipo;
	@Column(nullable = false)
	private Boolean ativo;
	@OneToOne
	@JoinColumn(nullable = false)
	private Pessoa pessoa;
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	public Character getTipo() {
		return tipo;
	}
	public void setTipo(Character tipo) {
		this.tipo = tipo;
	}
	public Boolean getAtivo() {
		return ativo;
	}
	public void setAtivo(Boolean ativo) {
		this.ativo = ativo;
	}
	public Pessoa getPessoa() {
		return pessoa;
	}
	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}
}
`

Me fala aonde vc viu que o certo é salvar como 1
E seu atributo está como privado, vc viu ne

Não entendi, o que você quis dizer.