Comment mapper un abrégé de la collection avec jpa?

Je suis en train de travailler si il est possible d'obtenir JPA pour conserver un abrégé de la collection avec des implémentations concrètes.

Jusqu'à présent, mon code ressemble à ceci:

@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 {
...
}

Mais je ne cesse de trébucher sur l'erreur de cartographie ci-dessous et je ne sais pas vraiment si cela est possible?

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

Mise à JOUR

Je ne pense pas que le problème est avec la classe abstraite mais la la @MappedSuperClass annotation.
Il ressemble à jpa n'aime pas la carte de la "un à plusieurs" de la relation avec un @MappedSuperClass.
Si je change la classe abstraite une classe concrète j'ai la même erreur.

Si je puis changer pour @Entity annotation cela semble fonctionner à la fois avec l'abstrait et concret de la classe.

Cela semble un peu étrange pour mapper une classe abstraite avec @Entity.
Je suis-je raté quelque chose?

SOLUTION

Réussi à le comprendre avec l'aide de rhinds.
Deux points à noter:

1) la classe abstraite doit être annotée avec @Entité et de la stratégie de l'héritage de table par classe pour les sous-classes ont leur propre table.

2) l'Identité de génération d'Identifiant ne fonctionne pas dans ce scénario et j'ai dû utiliser de génération de Table de type.

@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 {
...
}

OriginalL'auteur emt14 | 2012-03-26