2011-08-30 3 views
1

I ont les classes de domaine suivants:Mapping OneToMany avec des annotations Inscrit Inheritence:

@Entity 
@Table(name="ADDRESSBOOK_FIELD") 
@Inheritance(strategy=InheritanceType.JOINED) 
public abstract class AbstractAddressbookField { 
    private int dbID; 
    private Addressbook addressbook; 

    public AbstractAddressbookField() { 
    } 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    public int getId() { 
     return dbID; 
    } 

    public void setId(int id) { 
     this.dbID = id; 
    } 

    @ManyToOne 
    @JoinColumn(nullable=false) 
    public Addressbook getAddressbook() { 
     return addressbook; 
    } 

    public void setAddressbook(Addressbook addressbook) { 
     this.addressbook = addressbook; 
    } 

}

.

@Entity 
@Table(name="DATE_FIELD") 
public class DateField extends AbstractAddressbookField { 
    public DateField() { 

    } 
} 

.

@Entity 
@Table(name="NEW_ADDRESSBOOK") 
public class Addressbook { 
    private int dbID; 
    private Set<DateField> dateFields = new HashSet<DateField>(); 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    public int getDbID() { 
     return dbID; 
    } 

    public void setDbID(int dbID) { 
     this.dbID = dbID; 
    } 

    @OneToMany(mappedBy="Addressbook", cascade={CascadeType.ALL}) 
    public Set<DateField> getDateFields() { 
     return dateFields; 
    } 

    public void setDateFields(Set<DateField> dateFields) { 
     this.dateFields = dateFields; 
    } 
} 

Mes paquets sont correctement analysés pour ramasser toutes les applications, mais je reçois l'exception suivante:

Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: fields.DateField 

Je ne suis pas sûr de savoir pourquoi cela est, comme la classe est clairement mis en correspondance à.

Répondre

1

On dirait que cette entité n'est pas mappée dans votre fichier 'persistence.xml'.

+0

Malheureusement le paquet contenant mes classes de domaine est spécifié correctement, donc je me demande s'il y a quelque chose d'autre à changer. – mogronalol

1

Je pense que vous problème est la lettre majuscule:

@OneToMany(mappedBy="Addressbook", cascade={CascadeType.ALL}) 
public Set<DateField> getDateFields() { 
    return dateFields; 
} 

utilisation mappedBy="addressbook à la place.