Relacionamentos ISA no hibernate annotations

2 respostas
ACDias

Olá,

Estou criando um relacionamento entre três tabelas (pessoas IS-A alunos e pessoas IS-A professores), porém quando o hibernate vai gerar as tabelas ele não está gerando uma tabela para cada entidade e sim uma tabela única (pessoas) para todas, colocando os atributos de alunos e professores em pessoas. Gostaria de saber como eu faço para especificar que quero uma tabela para cada entidade. Pessoa.java
import javax.persistence.*;

@Entity
@Table(name = "pessoas")
@SequenceGenerator(name = "pessoas_sequence", sequenceName = "pessoas_id_seq", allocationSize = 1)
public class Pessoa {

	@Id
	@Column(name="id", nullable=false)
	@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pessoas_sequence")
	protected int id;

	@Column(name="nome", nullable=false)
	protected String nome;

	@Column(name="email", nullable=false)
	protected String email;

	@Column(name="telefone", nullable=false)
	protected String telefone;

	@OneToOne(cascade=CascadeType.ALL)
	private Endereco end;

	public Endereco getEnd() {
		return end;
	}

	public void setEnd(Endereco end) {
		this.end = end;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getTelefone() {
		return telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public int getId() {
		return id;
	}

	private void setId(int id) {
		this.id = id;
	}

}
Professor.java
import java.util.Set;
import javax.persistence.*;

@Entity
@Table(name="professores")
@PrimaryKeyJoinColumn(name="Pessoa.id")
public class Professor extends Pessoa {
	
	@Column(name="titulo", nullable=false)
	private String titulo;
	
	@OneToMany(cascade=CascadeType.ALL)
	private Set<Turma> turmas;

	public String getTitulo() {
		return titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
}
Aluno.java
import java.util.Set;
import javax.persistence.*;

@Entity
@Table(name="alunos")
@PrimaryKeyJoinColumn(name="Pessoa.id")
public class Aluno extends Pessoa {

	@Column(name="matricula",nullable=false)
	private String matricula;

	@ManyToMany(cascade=CascadeType.ALL)
	private Set<Turma> turmas;

	public Set<Turma> getTurmas() {
		return turmas;
	}

	public void setTurmas(Set<Turma> turmas) {
		this.turmas = turmas;
	}

	public String getMatricula() {
		return matricula;
	}

	public void setMatricula(String matricula) {
		this.matricula = matricula;
	}
}

2 Respostas

ACDias

Eu tava seguindo um tutorial do próprio guj, porém nesse tutorial não é usado annotations e sim xml, eu tava tentando adaptar pq não encontrei nenhum tutorial com annotations e na referência do tutorial do hibernate não achei nada q fizesse isso.

F

Olá,

É preciso definr o tipo de comportamento que o Hibernate deve ter com relacionamentos de herança.

De uma olhada aqui pra ver qual se encaixa no teu problema. Eu acredito que seja table per class.

]['s

Criado 22 de janeiro de 2007
Ultima resposta 23 de jan. de 2007
Respostas 2
Participantes 2