2010-10-25 25 views
43

Je rencontre un problème lors de la configuration d'une relation un-à-plusieurs dans mon objet annoté.mappedBy référence une propriété d'entité cible inconnue

Je donne les résultats suivants:

@MappedSuperclass 
public abstract class MappedModel 
{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="id",nullable=false,unique=true) 
    private Long mId; 

alors ce

@Entity 
@Table(name="customer") 
public class Customer extends MappedModel implements Serializable 
{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -2543425088717298236L; 


    /** The collection of stores. */ 
    @OneToMany(mappedBy = "customer", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    private Collection<Store> stores; 

et ce

@Entity 
@Table(name="store") 
public class Store extends MappedModel implements Serializable 
{ 

    /** 
    * 
    */ 
    private static final long serialVersionUID = -9017650847571487336L; 

    /** many stores have a single customer **/ 
    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn (name="customer_id",referencedColumnName="id",nullable=false,unique=true) 
    private Customer mCustomer; 

ce que je fais ici incorrecte

Répondre

76

L'attribut mappedBy est r Par exemple, la propriété est mCustomer, d'où le message d'erreur. Donc, soit changer votre carte dans:

/** The collection of stores. */ 
@OneToMany(mappedBy = "mCustomer", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
private Collection<Store> stores; 

Ou changer la propriété d'entité en customer (qui est ce que je ferais).

La référence mappedBy indique "Aller chercher sur la propriété du bean nommée" client "sur la chose dont j'ai une collection pour trouver la configuration."

+0

qui a fonctionné, je m'étais attendu à ce qu'il utilise la réflexion et utilise la méthode de setter ou de getter et pas la propriété directement. – boyd4715

+0

@ boyd4715: Vous pouvez essayer de déplacer vos annotations sur les getters pour voir ce qui se passe lors de l'utilisation de l'accès aux propriétés (vs accès aux champs). D'un autre côté, le javadoc de 'mappedBy' dit * Le champ qui possède la relation * donc je ne suis pas sûr que cela changera quoi que ce soit. –

+0

Cela a fonctionné, merci pour la clarification rapide –