Le mappage de Table Unique pour Intégrable Collection en JPA

J'ai une assez unique de la situation en essayant de carte une table unique pour de multiples entités JPA. J'ai lu sur @Embeddable et @pour valeur elementcollection, mais je ne suis pas sûr de la façon de les utiliser dans ma situation (ou si je peux). Une table de base de données est titulaire d'informations sur les Cours. Il peut y avoir des lignes de la table où tout le Parcours est le même, sauf pour quelques valeurs, telles que le numéro de la chambre et par jour. Par exemple:

TERM_CODE   SUBJECT_CODE    ROOM    DAY    INSTRUCTOR_ID
201220      EGRE            0101    TR     123
201220      EGRE            0103    W      124

Est-il une manière que je peux extraire des données à partir de deux lignes comme ci-dessus, et de mettre les données communes à l'un des Objets et des valeurs différentes dans une Collection d'Objets distincts? Voici un exemple de la façon dont j'aimerais avoir les classes définies:

@Entity
public class Course implements Serializable {

    @Id
    @Column(name = "TERM_CODE")
    private Long termCode;

    @Column(name = "SUBJECT_CODE")
    private String subjectCode;

    @Embedded
    Collection<CourseSchedule> schedule;

    public Long getTermCode() {
     return termCode;
    }

    public void setTermCode(Long termCode) {
     this.termCode = termCode;
    }

    public String getSubjectCode() {
     return subjectCode;
    }

    public void setSubjectCode(String subjectCode) {
     this.subjectCode = subjectCode;
    }
}

CourseSchedule:

@Embeddable
public class CourseSchedule {
     private String room;
     private String day;

      public String getRoom() {
       return room;
      }

      public void setRoom(String room) {
       this.room = room;
      }

      public String getDay() {
       return day;
      }

      public void setDay(String day) {
       this.day = day;
      }

      public String getInstructorId() {
       return instructorId;
      }

      public void setInstructorId(String instructorId) {
       this.instructorId = instructorId;
      }
}

Moi aussi je suis confus quant à ce que mes JPQL pourrait ressembler dans cette situation une fois que je les reçois mappé.

EDIT:

Si j'ajoute @Id à la TERM_CODE colonne, un Cours d'objet est retourné sans Hibernate erreurs, mais le CourseSchedule Collection qui fait partie du Cours est null.

EDIT 2:

J'ai essayé de jouer avec le traitement Sûr et CourseSchedule que deux tables distinctes (même si ils ne le sont pas), mais je n'arrive pas à obtenir d'eux, joint à l'aide de @OneToMany et @ManyToOne.

@Entity
@IdClass(CourseId.class)
@Table(name = "course_table")
public class Course implements Serializable {

    @OneToMany(mappedBy = "course")
    private Collection<CourseSchedule> schedule;

    @Id
    @Column(name = "TERM_CODE")
    private Long termCode;

    @Id
    @Column(name = "SUBJECT_CODE")
    private Long subjectCode;

    ...
}

@Entity
@IdClass(CourseScheduleId.class)
@Table(name = "course_table")
public class CourseSchedule implements Serializable {

    @ManyToOne
    @JoinColumns({
    @JoinColumn(name="TERM_CODE", referencedColumnName="TERM_CODE"),
    @JoinColumn(name = "SUBJECT_CODE", referencedColumnName="SUBJECT_CODE")
    })
    private Course course;

    @Column(name = "TERM_CODE")
    private Long termCode;

    @Column(name = "SUBJECT_CODE")
    private Long subjectCode;

    @Id
    private String room;

    @Id
    private String day;

    @Id
    @Column(name = "INSTRUCTOR_ID")
    private String instructorId;

    ...

}

(Le CourseId et CourseScheduleId sont de simples classes utilisées pour le composite ID.) Au-dessus de la cartographie renvoie l'erreur suivante:

org.hibernate.MappingException: Foreign key (FK82D03688F590EF27:course_table [TERM_CODE,SUBJECT_CODE])) must have same number of columns as the referenced primary key (course_table [ROOM,DAY,INSTRUCTOR_ID)

Je n'ai pas besoin CourseSchedule renvoyant à l'Sûr, si cela peut vous aider rendre cela plus facile.

Des idées? Mon seul autre pensée est de définir la manière la plus complète des entités distinctes (non joint), et puis en quelque sorte la carte à l'aide d'JPQL.

Je suppose que c'est une base de données existante? si vous ne pouvez pas utiliser une clé étrangère à la TERM_CODE dans un CourseSchedule table? Je pourrais avoir une bonne raison de le faire, mais vous dupliquer quelques données pour stocker CHAMBRE et par JOUR de l'information. Ce n'hibernate rapport lorsque vous carte comme ça?
Malheureusement je ne peux pas changer la base de données, et tout ça dans un tableau. Je souhaite que je pourrais le convaincre de la normaliser, mais qui n'est pas le cas.
Si je le lance dans sa forme actuelle, je reçois le message d'erreur "Aucun identifiant spécifié pour l'entité: Cours", j'ai presque aurait dû s'attendre. Un autre problème est que la table de base de données n'a pas de définir une clé primaire.

OriginalL'auteur acvcu | 2012-02-16