Hibernate polymorphism

Esta é uma questão de polimorfismo Hibnerate e uma questão de design de modelo de dados; eles estão entrelaçados. Eu usei o Hibernate no passado e gostei, mas às vezes acho difícil pensar em algo que não seja um design trivial. Nem uma batida no Hibernate; apenas uma observação de que o ORM em geral pode ser desafiado

Acho que esta é uma pergunta do Hibernate 101, mas não tenho certeza. O que estou tentando alcançar pode nem ser possível.

Tenho uma classe abstrata Fruit que será subclassificada em Apple e Orange. Eu tenho uma classe de nota que representa notas ou comentários sobre maçãs e laranjas. Uma Apple ou Orange pode ter muitas anotações associadas, mas apenas uma Apple ou Orange será associada a uma determinada anotaçã

Aqui estão os esboços das classes, onde eu estou omitindo para onde vão os IDs dos objetos e as propriedades das maçãs que os distinguem das laranjas. Por enquanto, não tenho muita opinião sobre qual estratégia de herança do Hibernate eu us

abstract public class Fruit {
}

// Apples have notes written about them:
public class Apple extends Fruit {
   private Set<Note> note;
   ...

   @OneToMany(cascade = CascadeType.ALL)
   public Set<Note> getNote() {
       return note;
   }
}


// Oranges have notes written about them:
public class Orange extends Fruit {
   private Set<Note> note;
   ...

   @OneToMany(cascade = CascadeType.ALL)
   public Set<Note> getNote() {
       return note;
   }
}

Aqui está a classe Note atualmente implementada, na qual vemos que ela possui campos para Apple e Orange. A falha ou deselegância nesse design é que uma instância de nota única apontará apenas para Apple ou Orange e nunca para ambos. Portanto, se uma nota estiver vinculada a uma maçã, o campo laranja será supérfluo e sem graça e vice-vers

// A note about an Apple or Orange
public class Note {
   private String theNote;
   private Apple apple; 
   private Orange orange;
   ...

   // with the usual many to one mapping
   @ManyToOne
   @JoinColumn(name = "apple_id")
   public Apple getApple() { 
       return apple;
   }

   // with the usual many to one mapping
   @ManyToOne
   @JoinColumn(name = "orange_id")
   public Orange getOrange() {
       return orange;
   }

   ...
}

No entanto, esta é a classe Note que eupensauero basear meu design, mas não sei como pensar sobre isso com relação à anotação do Hibernate e ao mapeamento de tabel

// A note about a fruit:
public class Note {
   private String theNote;
   private Fruit fruit;
   ...
}

whereupon fruit será uma instância da Apple ou da Orang

Essa última classe do Note, com referência a uma Fruit, que realmente conterá uma Apple ou Orange, pode até ser reconciliada com o mapeamento do Hibernate ORM? Se sim, alguém pode falar sobre como.

questionAnswers(4)

yourAnswerToTheQuestion