J'ai un problème lors de la configuration d'une relation un à plusieurs dans mon objet annoté.
J'ai les éléments suivants:
@MappedSuperclass
public abstract class MappedModel
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id",nullable=false,unique=true)
private Long mId;
ensuite ceci
@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 ça
@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;
qu'est-ce que je fais de mal ici
L'attribut mappedBy
fait référence à customer
tandis que la propriété est mCustomer
, d'où le message d'erreur. Donc, changez votre mappage en:
/** The collection of stores. */
@OneToMany(mappedBy = "mCustomer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<Store> stores;
Ou changez la propriété de l'entité en customer
(ce que je ferais).
La référence mappedBy indique "Allez voir la propriété du bean nommée 'client' sur la chose dont j'ai une collection pour trouver la configuration."
Je connais la réponse de @ Pascal Thivent a résolu le problème. Je voudrais ajouter un peu plus à sa réponse à d'autres qui pourraient surfer sur ce fil.
Si vous êtes comme moi dans les premiers jours de l'apprentissage et de la réflexion sur l'utilisation du @OneToMany
annotation avec la propriété 'mappedBy
', cela signifie également que l'autre côté tenant la @ManyToOne
annotation avec le @JoinColumn
est le "propriétaire" de cette relation bidirectionnelle.
De plus, mappedBy
prend le nom d'instance (mCustomer
dans cet exemple) de la variable Class en entrée et pas le Type de classe (ex: Client) ou le nom de l'entité (Ex: client).
BONUS: Consultez également la propriété orphanRemoval
de @OneToMany
annotation. S'il est défini sur true, si un parent est supprimé dans une relation bidirectionnelle, Hibernate supprime automatiquement ses enfants.