Wie Karte eine abstrakte Sammlung mit jpa?

Ich versuche zu arbeiten, wenn es möglich ist, erhalten JPA zu bestehen, eine abstrakte Auflistung mit konkreten Implementierungen.

Soweit mein code sieht wie folgt aus:

@Entity
public class Report extends Model {

    @OneToMany(mappedBy = "report",fetch=FetchType.EAGER)
    public Set<Item> items;
}

@MappedSuperclass
public abstract class OpsItem extends Model {

    @ManyToOne
    public RetailOpsBranch report;
}


@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class AItem extends OpsItem {
...
}

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class BItem extends OpsItem {
...
}

Aber ich halte stolpern auf die mapping-Fehler unten, und ich weiß wirklich nicht, ob dies möglich ist?

JPA error
A JPA error occurred (Unable to build EntityManagerFactory): Use of @OneToMany or
@ManyToMany targeting an unmapped class: models.Report.items[models.OpsItem]

UPDATE

Ich glaube nicht, dass das problem mit der abstrakten Klasse aber die die @MappedSuperClass annotation.
Es sieht aus wie jpa nicht wie auf der Karte die eins-zu-viele-Beziehung mit einer @MappedSuperClass.
Wenn ich die abstrakte Klasse und eine konkrete Klasse, ich habe den gleichen Fehler.

Wenn ich dann auf ändern, um @Entity annotation die zu funktionieren scheinen, mit dem sowohl die abstrakte und konkrete Klasse.

Dies scheint ein bisschen seltsam, auf der Karte eine abstrakte Klasse mit @Entity.
Bin ich ich etwas fehlt?

LÖSUNG

Verwaltet, um es herauszufinden, mit der Hilfe von rhinds.
Zwei Punkte zu beachten:

1) die abstrakte Klasse muss kommentiert werden mit @Entity und Vererbung Strategie der Tabelle pro Klasse für die Unterklassen haben Ihre eigene Tabelle.

2) Identität-Id-Generierung wird nicht in diesem Szenario funktionieren und ich hatte die Verwendung von Tabellen-generation geben.

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class OpsItem extends GenericModel {

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE)
    public Long id;

    public String          branchCode;

    @ManyToOne
    public Report report;
}

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class AItem extends OpsItem {
...
}
InformationsquelleAutor emt14 | 2012-03-26
Schreibe einen Kommentar