Hibernate polymorphisme

C'est un Hibnerate polymorphisme question et un modèle de données de conception
question; ils sont intertwingled. J'ai utilisé de la mise en veille prolongée dans le passé,
et ont beaucoup aimé, mais je trouve parfois difficile de penser à
de rien, mais trivial dessins. Pas un coup sur Hibernate; juste
une observation que l'ORM, en général, peut être difficile.

Je pense que c'est une Hibernate 101 question, mais je ne suis pas sûr. Ce que je suis en train de réaliser peut-être même pas possible.

J'ai une classe abstraite de Fruits qui seront sous-classé dans Apple
et d'Orange. J'ai une classe qui représente les notes ou des commentaires
sur les Pommes et les Oranges. Une Pomme ou une Orange peut avoir de nombreuses Notes
associés avec elle, mais seulement une Pomme ou une Orange sera jamais
associé à une Note.

Ici sont des croquis des classes, où je suis pour l'instant en omettant où
l'id de l'objet de l'aller, et les propriétés de Pommes de distinguer
de Oranges. Pour le moment, je ne me sens pas fortement sur Hibernent stratégie de l'héritage que j'utilise.

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;
   }
}

Ici, c'est la Note de la classe actuellement mis en œuvre, dans lequel nous voyons que
il contient des champs pour les deux une Pomme et une Orange. La faille ou inelegance
dans cette conception, une seule remarque instance uniquement
l'un de Pomme ou d'Orange, et jamais les deux. Donc, si une Note est lié à
une Pomme, l'Orange, le terrain est inutile et inesthétique, et
vice-versa.

//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;
   }

   ...
}

Cependant, c'est la classe que je pense je veux à la base de mon
conception sur, mais je ne suis pas sûr de savoir comment pensez à ce sujet avec respect
à Hibernate d'annotation et de mappage de table:

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

après quoi fruit sera soit une Pomme ou d'Orange instance.

Cette dernière Note de la classe, avec sa référence à un Fruit, qui détiendra une Pomme ou une Orange, même être réconcilié avec l'ORM Hibernate mapping? Si oui, quelqu'un peut-merci de parler de comment.

J'ai un problème similaire à cause de mon code s'exécutant sur une base de données MySQL. Êtes-vous prêt à m'aider avec mes question? Voici le lien: stackoverflow.com/questions/25252541/...

OriginalL'auteur ae6rt | 2009-06-11