*.hbm.xml --&gt @Annotations

	<class name="Pessoa" table="pessoa">
		<id name="id" column="id">
			<generator class="identity"/>
		</id>
		<property name="nome" column="nome" type="string" />
		<property name="matricula" column="matricula" type="string" />
		<property name="dataNascimento" column="data_nascimento" type="date" />

		<joined-subclass name="Professor" table="professor">
			<key column="id" />
			<property name="especializacao" column="especializacao" type="string" />
			<property name="salario" column="salario" type="big_decimal" lazy="true" />
			<set name="turma" inverse="true" order-by="id asc">
				<key column="id_professor"/>
				<one-to-many class="Turma"/>
			</set>
			<set name="habilitacao" table="disciplina_professor" lazy="true">
				<key column="id_professor"/>
				<many-to-many class="Disciplina" column="id_disciplina"/>
			</set>
		</joined-subclass>
		
		<joined-subclass name="Aluno" table="aluno">
			<key column="id" />
			<property name="anoIngresso" column="ano_ingresso" type="integer" />
			<property name="curso" column="curso" type="string" />
			<set name="inscricao" table="aluno_turma" lazy="true">
				<key column="id_aluno"/>
				<many-to-many class="Turma" column="id_turma"/>
			</set>
		</joined-subclass>
		
	</class>

Pessoa é uma classe abstract. Aluno e Professor sao sub-class de Pessoa.

Nao to conseguindo fazr com @Annotations

Como faco para fzr esse exemplo com anotacoes?

Opa,

Ai vai um exempo:

/*
 * Pessoa.java
 *
 * Created on 19 de Novembro de 2006, 17:28
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.unipar.jclinica.model;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.MappedSuperclass;

/**
 *
 * @author Paulo Henrique Peres <paulo.peres@pop.com.br>
 */
@MappedSuperclass
public abstract class Pessoa implements Serializable {
    
    @Column(name="NOME", nullable=false, length=100)      
    private String nome;
    
    @Column(name="EMAIL", nullable=false, length=50)
    private String email;

    public String getNome() {
        return nome;
    }

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

    public String getEmail() {
        return email;
    }

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

Classe Usuário que herda de Pessoa

/*
 * Usuario.java
 *
 * Created on 19 de Novembro de 2006, 17:34
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.unipar.jclinica.model;

import javax.persistence.CascadeType;
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.SequenceGenerator;
import javax.persistence.Table;

/**
 *
 * @author Paulo Henrique Peres <paulo.peres@pop.com.br>
 */
@Entity
@Table(name="USUARIO")
@SequenceGenerator(name="SG_USUARIO", sequenceName="SG_USUARIO")
public class Usuario extends Pessoa {
    
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    @Column(name="CODIGO_FK")
    private int codigo;
    
    @Column(name="TIPO_USUARIO", nullable=false, length=20)
    private String tipoUsuario;
    
    @Column(name="NOME_USUARIO", nullable=false, length=20)
    private String nomeUsuario;
    
    @Column(name="SENHA", nullable=false, length=20)
    private String senha;

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    public String getTipoUsuario() {
        return tipoUsuario;
    }

    public void setTipoUsuario(String tipoUsuario) {
        this.tipoUsuario = tipoUsuario;
    }

    public String getNomeUsuario() {
        return nomeUsuario;
    }

    public void setNomeUsuario(String nomeUsuario) {
        this.nomeUsuario = nomeUsuario;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    }
    
    

       
}

Desta forma, vai ser criado uma tabela só com todos os campos para o Usuário, existe mais formas, como por exempo, criar uma tabela pessoa e uma usuário, é bem simples, na documentação tem bastante coisa.

Valeu,

Paulo

Valeu paulo, era isso mesmo…
Ainda nao testei…

Mas posso ver uma coisa, por exemplo o id neste caso eh salvo na tabela cliente?

tah com cara de postgresql esse banco.
Correta essa informacao?
rs

Alexandre,

Serve para o PostgreSQL, mas to usando este código com o Firebird.

Quando a tua duvida em relação ao código, é o seguinte, no meu projeto é desse jeito, porém, já fiz uma vez da seguinte forma:

Classe Pessoa (== Tabela no Banco de Dados)
Classe Cliente (== Tabela no Banco de Dados se relacionando com Pessoa)
Classe Funcionario(== tabela no banco de dados se relacionando com o Pessoa)

Desta forma o que muda é a estratégia, veja, no lugar de:

@MappedSuperClass

vc coloca desta forma na classe abstrata

@Entity
@Inheritance(strategy=InheritanceType.JOINED)

Qualquer dúvida, veja aqui:

http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#d0e749

Qualquer dúvida é so falar.

Valeu,

Paulo

Obrigado Paulo, ajudou bastante!

Paulo, vc pode me passar os fontes do seu projeto.
So para eu continuar com meus estudos e aprender mais com os fontes reais de programacao no dia a dia?