webentwicklung-frage-antwort-db.com.de

mappedBy verweist auf eine unbekannte Zielentitätseigenschaft

Ich habe ein Problem beim Einrichten einer Eins-zu-Viele-Beziehung in meinem mit Anmerkungen versehenen Objekt.

Ich habe folgendes:

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

dann das

@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;

und das

@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;

was mache ich falsch hier

62
boyd4715

Das Attribut mappedBy verweist auf customer, während die Eigenschaft mCustomer ist, daher die Fehlermeldung. Ändern Sie also entweder Ihr Mapping in:

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

Oder ändern Sie die Eigenschaft entity in customer (was ich auch tun würde).

Die mappedBy-Referenz gibt an: "Sehen Sie sich in der Bean-Eigenschaft mit dem Namen 'customer' das Objekt an, von dem ich eine Sammlung habe, um die Konfiguration zu finden."

112
Pascal Thivent

Ich kenne die Antwort von @ Pascal Thivent hat das Problem gelöst. Ich würde gerne ein bisschen mehr zu seiner Antwort an andere hinzufügen, die vielleicht in diesem Thread surfen.

Wenn Sie wie ich in den ersten Tagen des Lernens sind und sich mit dem Konzept der Verwendung der Annotation @OneToMany Mit der Eigenschaft 'mappedBy' befassen, bedeutet dies auch, dass die andere Seite die @ManyToOne Anmerkung mit dem @JoinColumn Ist der 'Besitzer' dieser bidirektionalen Beziehung.

Außerdem nimmt mappedBy den Instanznamen (mCustomer in diesem Beispiel) der Klassenvariablen als Eingabe und nicht der Klassentyp (Beispiel: Kunde) oder der Entitätsname (Beispiel: Kunde).

BONUS: Sehen Sie sich auch die Eigenschaft orphanRemoval der Annotation @OneToMany An. Wenn der Wert auf true gesetzt ist und ein übergeordnetes Element in einer bidirektionalen Beziehung gelöscht wird, werden die untergeordneten Elemente von Hibernate automatisch gelöscht.

1
Dhyanesh