Hibernate - Herança, Single Table

3 respostas
ThiagoWorldCoder

boa tarde galera!

Eu estou usando annotation

Eu tenho uma tabela Pessoa, só que eu preciso criar duas classes, uma com o nome de Pessoa, e a outro entidade sendo herança de Pessoa, com o nome de Usuario.

A diferença entre elas é que a classe herança terá outros campos a mais.

Este é um caso de herança Single Table (Única Tabela).

como eu faço esse mapeamento? Eu já procurei bastante e não encontrei!!

valeu!!

3 Respostas

fiaux

E na documentação oficial, já olhou?
http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#d0e791

ThiagoWorldCoder

Vejam o meu código e me digam o que falta, por favor:

o hibernate está gerando no banco uma coluna com o nome DType, do tipo String, além do campo senha que eu especifiquei.

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
    name="senhaUsu",
    discriminatorType=DiscriminatorType.STRING, columnDefinition="senhaUsu"
)
public class UsuarioBean extends PessoaBean implements Serializable {

	@Column(name="senhaUsu")
	private String senha;
	
	public UsuarioBean(){
		super();
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
	
}
@Entity
@Table(name="Pessoa")
public class PessoaBean implements Serializable {

	@Id @GeneratedValue
	@Column(name="codigo")
	private Integer id;

	@Column(nullable=false)
	private String nome;
	
	@Column(nullable=false)
	private String sobreNome;
	
	@Column(nullable=false)
	private String dtNascimento;
	
	@Column(nullable=false)
	private String email;
	
	@OneToMany(mappedBy="pessoa")
	private Set<TelefoneBean> telefones = new HashSet<TelefoneBean>();
	
	@OneToMany
	@JoinColumn(name="pessoaPk")
	private Set<EnderecoBean> enderecos = new HashSet<EnderecoBean>();
	
	public PessoaBean(){
		super();
	}

tabela gerada:

create table Pessoa (
        DTYPE varchar(31) not null,
        codigo integer not null auto_increment,
        dtNascimento varchar(255) not null,
        email varchar(255) not null,
        nome varchar(255) not null,
        sobreNome varchar(255) not null,
        senhaUsu varchar(255),
        primary key (codigo)
    ) type=InnoDB
Rafael_Steil

Mas eh isso mesmo que Single Table faz - usa uma unica tabela. Logo, se voce nao quer uma, mas sim duas tabelas, deve usar outro tipo de heranca - no seu caso, JOIN parece ser mais aplicavel.

Rafael

Criado 4 de julho de 2008
Ultima resposta 4 de jul. de 2008
Respostas 3
Participantes 3