Je voulais implémenter une relation un-à-un en utilisant Hibernate et JPA. J'ai deux classes qui font partie d'une hiérarchie: Hiérarchie de question et hiérarchie de réponse.Hibernate, JPA - unidirectionnel un-à-un
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class QuestionUnit {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private AnswerUnit correctAnswer;
...}
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class AnswerUnit {
@Id
private int id;
public abstract Object getAnswerContent();
public abstract boolean isEqual(AnswerUnit otherAnswer);
public int getId() {
return id;
}
}
et nous avons OpenQuestion et OpenAnswer en tant qu'implémentations.
Je voulais que la table avec OpenQuetions ait une clé primaire générée automatiquement, et que la table avec OpenAnswer ait une clé primaire ayant la même valeur que la clé primaire dans la table OpenQuestion. J'ai essayé de suivre l'exemple d'ici: http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html/entity.html partie 2.2.5.1. Un par un.
Mais quand je persiste le OpenQuestion, je reçois la table OpenQuestion avec des colonnes id
, questionContent
et OpenQuestionAnswer avec id
, answerContent
, mais les valeurs des ids ne correspondent pas.
Alors, où est-ce que je fais une erreur?
qui est le point, comme je l'ai dit, en OpenQuestion je n'ai que '' id' et questionContent', et tout le mapping est e Je pense que le code. – Andna
Vous avez également besoin de @MappedSupperClass - s'il vous plaît voir ma réponse éditée. Il m'a fallu du temps pour m'en souvenir. –
Je ne peux pas utiliser MappedSuperClass, vous ne pouvez pas utiliser les mappages dans des classes qui ne sont pas annotées avec entity, et j'ai une classe QuestionList qui a ArrayList de QuestionUnits. – Andna