2010-12-01 7 views
0

J'ai un problème avec la relation un-à-plusieurs. J'ai une classe abstraite Artifact.java. Ce n'est pas mappé à une table. Il existe d'autres classes concrètes s'étendant à partir de cela, et elles sont mappées à différentes tables. Maintenant, j'ai une autre classe, mappée à une table, et cette classe peut avoir une collection de n'importe laquelle de ces classes, c'est-à-dire une collection de type Artifact.java. J'ai besoin de cartographier cela en utilisant JPA, et l'ai fait comme suit.Problème avec @OneToMany et Abstraction dans JPA

@OneToMany(mappedBy="artifactId",targetEntity=Artifact_Item.class, 
     fetch=FetchType.EAGER, cascade=CascadeType.ALL) 
private List<Artifact_Item> artifactItemList; 

Cela entraîne l'exception suivante.

org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: dao.model.Artifact.artifactItemList[dao.model.Artifact_Item] 

Quelqu'un peut-il s'il vous plaît m'aider à résoudre ce problème?

Merci.

D'accord, je reformule la question. J'ai une classe, Artifact.java, qui est mappée à la table Artifact. Maintenant, chaque artefact peut avoir plusieurs sous-éléments (un-à-plusieurs), qui ne sont pas liés de toute façon. Nous avons donc décidé d'avoir une classe abstraite ArtifactItem.java, de sorte que tous les sous-éléments puissent l'étendre. Ainsi, Artifact a List of ArtifactItems. ArtifactItem.java et n'est pas mappé à la table.

Cela contient 2 éléments, un id et et artifactId, utilisé comme clé étrangère. L'ID a été marqué comme @GeneratedValue (strategy = GenerationType.AUTO) et artifactId comme @ManyToOne (targetEntity = Artifact.class) @JoinColumn (name = "artefact_id", referencedColumnName = "id"). Et la classe a été annotée comme @MappedSuperclass.

Il existe de nombreux sous-éléments qui étendent ArtifactItem. Chacun a sa propre table, par exemple, ArtifactType1.java a ses propres champs et est mappé à la table ArtifactType1 et ainsi de suite.

Maintenant, puisque la liste de Artifact.java doit être mappée à ArtifactItem, car la liste est une collection d'ArtifactItems. Mais quand j'essaie de le mapper de la manière mentionnée ci-dessus, je reçois l'exception donnée ci-dessus.

Espérons que c'est plus clair maintenant :).

Merci.

+0

Pouvez-vous reformuler votre question pour faire rapport entre vos classes plus clair? – axtavt

Répondre

1

Utilisez @MappedSuperclass sur ArtifactItem (se débarrasser de l'underscore)

+0

Hey mate, @MappedSuperclass a été ajouté à cette classe :(. – Raj

+0

J'ai renommé la classe aussi, mon mauvais :). – Raj

Questions connexes