Herança no Hibernate Annotations

Boa tarde amigos, tenho uma superclasse Permissionario e duas subclasses PermMilitar e PermCivil

Quando executo o sistema a Tabela Permissionario é criada com os campos da classe PermMilitar e a tabela PermCivil nem é criada.

segue código.

package br.mil.siscop.bean;

import java.sql.Timestamp;
import java.util.Date;

import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name = "permissionario")
public class Permissionario {

	@OneToOne(mappedBy = "permissionario", fetch = FetchType.LAZY)
	@OneToMany(mappedBy = "permissionario", fetch = FetchType.LAZY)
	@Cascade(CascadeType.ALL)
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id_permissionario")
	private int idPermissionario;
	
	@Column(name = "nome")
	private String nome;
	
	@Column(name = "nr_identidade")
	private String nrIdentidade;
	
	@Column(name = "email")
	private String email;
	
	@Column(name = "fone")
	private String fone;
	
	@Column(name="dt_nascimento")
	@Temporal(TemporalType.DATE)
	private Date dtNascimento;
	
	@Column(name = "dt_cadastro")
	private Timestamp dtCadastro;
	
	@Column(name = "de_senha")
	private String deSenha;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_perm_situacao", referencedColumnName = "id_perm_situacao")
	private PermSituacao permSituacao;
	
	@ManyToOne(fetch = FetchType.EAGER)
	@JoinColumn(name = "id_perm_tipo", referencedColumnName = "id_perm_tipo")
	private PermTipo permTipo;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_orgao", referencedColumnName = "id_orgao")
	private Orgao orgao;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="id_perfil", referencedColumnName = "id_perfil")
	private Perfil perfil;

	
	
	
	public int getIdPermissionario() {
		return idPermissionario;
	}

	public void setIdPermissionario(int idPermissionario) {
		this.idPermissionario = idPermissionario;
	}

	public String getNome() {
		return nome;
	}

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

	public String getNrIdentidade() {
		return nrIdentidade;
	}

	public void setNrIdentidade(String nrIdentidade) {
		this.nrIdentidade = nrIdentidade;
	}

	public String getEmail() {
		return email;
	}

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

	public String getFone() {
		return fone;
	}

	public void setFone(String fone) {
		this.fone = fone;
	}

	public Date getDtNascimento() {
		return dtNascimento;
	}

	public void setDtNascimento(Date dtNascimento) {
		this.dtNascimento = dtNascimento;
	}

	public Timestamp getDtCadastro() {
		return dtCadastro;
	}

	public void setDtCadastro(Timestamp dtCadastro) {
		this.dtCadastro = dtCadastro;
	}

	public String getDeSenha() {
		return deSenha;
	}

	public void setDeSenha(String deSenha) {
		this.deSenha = deSenha;
	}

	public PermSituacao getPermSituacao() {
		return permSituacao;
	}

	public void setPermSituacao(PermSituacao permSituacao) {
		this.permSituacao = permSituacao;
	}

	public PermTipo getPermTipo() {
		return permTipo;
	}

	public void setPermTipo(PermTipo permTipo) {
		this.permTipo = permTipo;
	}

	public Orgao getOrgao() {
		return orgao;
	}

	public void setOrgao(Orgao orgao) {
		this.orgao = orgao;
	}

	public Perfil getPerfil() {
		return perfil;
	}

	public void setPerfil(Perfil perfil) {
		this.perfil = perfil;
	}

}

PermMilitar

package br.mil.siscop.bean;


import javax.persistence.AttributeOverride;
import javax.persistence.AttributeOverrides;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table(name = "perm_militar")
public class PermMilitar extends Permissionario {

	@Column(name = "id_perm_militar")
	private int idPermMilitar;
	
	@Column(name = "nome_guerra")
	private String nomeGuerra;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_posto_grad_espec", referencedColumnName = "id_posto_grad_espec")
	private PostoGradEspec postoGradEspec;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_qas_qms", referencedColumnName = "id_qas_qms")
	private QASQMS qasQMS;
	
	
	
	public int getIdPermMilitar() {
		return idPermMilitar;
	}

	public void setIdPermMilitar(int idPermMilitar) {
		this.idPermMilitar = idPermMilitar;
	}

	public PostoGradEspec getPostoGradEspec() {
		return postoGradEspec;
	}

	public void setPostoGradEspec(PostoGradEspec postoGradEspec) {
		this.postoGradEspec = postoGradEspec;
	}

	public QASQMS getQasQMS() {
		return qasQMS;
	}

	public void setQasQMS(QASQMS qasQMS) {
		this.qasQMS = qasQMS;
	}

	public String getNomeGuerra() {
		return nomeGuerra;
	}

	public void setNomeGuerra(String nomeGuerra) {
		this.nomeGuerra = nomeGuerra;
	}

}

PermCivil

package br.mil.siscop.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "perm_civil")
public class PermCivil extends Permissionario {

	@Column(name = "id_perm_civil", length = 6)
	private int idPermCivil;
	
	@Column(name = "nr_cpf", length = 11)
	private String nrCPF;
	

	public int getIdPermCivil() {
		return idPermCivil;
	}

	public void setIdPermCivil(int idPermCivil) {
		this.idPermCivil = idPermCivil;
	}

	public String getNrCPF() {
		return nrCPF;
	}

	public void setNrCPF(String nrCPF) {
		this.nrCPF = nrCPF;
	}

}

http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e829

Tem um post no meu blog que explica o básico de como utilizar herança em JPA. :wink:

http://www.rodrigolazoti.com.br/?p=47

[]'s