Duvidas sobre Classes

Pessoa minha duvida vcs iram tirar de letra mais eu to me quebrando aqui :smiley:

Olha só preciso fazer com que ao gerar minha tabela Cat no banco ele busque a classe Animal para criar junto
meio complicado né

Minha classe Animal

public class Animal implements Serializable{

    public String especie;
    
    public Animal(){
        
    }

    public String getEspecie() {
        return especie;
    }

    public void setEspecie(String especie) {
        this.especie = especie;
    }
            
}

Minha Classe Cat

@Entity @Table(name="cat")
public class Cat extends Animal{

    @Id @GeneratedValue    
    private int id;
    private String nome;
    private String cor;
    private Animal animal = new Animal();
    
    public Cat(){
        
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }   
    
    public String getNome() {
        return nome;
    }

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

    public String getCor() {
        return cor;
    }

    public void setCor(String cor) {
        this.cor = cor;
    }

    public Animal getAnimal() {
        return animal;
    }

    public void setAnimal(Animal animal) {
        this.animal = animal;
    }
            
}

Minha classe Gerar Tabelas

public class GeraTabelaCat {

     public static void main(String[] args) {
        // Cria uma configuração para a classe Produto
        AnnotationConfiguration cfg = new AnnotationConfiguration();
        
        cfg.addAnnotatedClass(Cat.class);        
        
        new SchemaExport(cfg).create(true, true);
    }
    
}

Ele criou a tabela assim no banco

create table cat (
        id int4 not null,
        animal bytea,
        cor varchar(255),
        nome varchar(255),
        primary key (id)
    )

Ele está criando o animal como bytea, mais eu preciso que ele traga o que esta dentro da classe animal que seria a “espécie”, entenderam?

COMO FAÇO ISSO?

vc precisa mapear a classe animal como heranca e a CAT com subclasse

fazendo algo +ou- assim:

@Entity
@Table(name="animal")
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="especie",discriminatorType=DiscriminatorType.STRING)
public class Animal implements Serializable{

    @Id @GeneratedValue    
    private int id;

   

    public String especie;
    
    public Animal(){
        
    }

    public String getEspecie() {
        return especie;
    }

    public void setEspecie(String especie) {
        this.especie = especie;
    }

    public int getId() {
        return id;
    }

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

e a na classe cat

@Entity
@Table(name="cat")
@DiscriminatorValue(value="felinos")
public class Cat extends Animal{

   
    private String nome;
    private String cor;
    //creio que vc nao precisse fazer esse relacionamento mais caso precise utilize:
    // @ManyToOne
    // @JoinColumn(name="animal_id")
    //private Animal animal = new Animal();
    
    public Cat(){
        
    }

    
    
    public String getNome() {
        return nome;
    }

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

    public String getCor() {
        return cor;
    }

    public void setCor(String cor) {
        this.cor = cor;
    }

    //public Animal getAnimal() {
    //    return animal;
    //}

    //public void setAnimal(Animal animal) {
    //    this.animal = animal;
    //}
            
}

Pior que não funcionou :frowning:

Ql erro deu?? adicionasse no hibernate.cfg a entidade anima?

estou usando hibernate annotations nao uso o hibernate.cfg.xml

Esta dando um erro na classe Cat

no Discriminator!!!

Tira o metodo construtor da sua classe Cat.

Hum…

adicionasse o cfg.addAnnotatedClass(Animal.class)?

 public class GeraTabelaCat {  
   
      public static void main(String[] args) {  
         // Cria uma configuração para a classe Produto  
         AnnotationConfiguration cfg = new AnnotationConfiguration();  
         
         cfg.addAnnotatedClass(Animal.class);  
         cfg.addAnnotatedClass(Cat.class);          
           
         new SchemaExport(cfg).create(true, true);  
     }  
       
}

Caso ja tenhas feito isso, poste o erro, pois assim de cara nao estou vendo o q pode estar errado no discriminator

Já que estamos falando sobre herança e hibernate com eu faço para extender uma classe e todos seus atributos serem colocados no banco da classe filha?

Eu sempre deixei de lado a herança na hora de fazer algo no banco, mas sempre estive curioso para saber.

Algo como:

public class Pessoa {
private String nome;
private String rg;
private String idade;

//getters e setters
}

@Entity
@Table
public class PessoaFisica  extends Pessoa {
@Id
private int id;
private String cpf;

//getters e setters
}

E na tabela pessoafisica eu ter os campos de Pessoa?