mappedBy Verweis auf eine unbekannte Zielentitätseigenschaft

Lesezeit: 3 Minuten

mappedBy Verweis auf eine unbekannte Zielentitatseigenschaft
boyd4715

Ich habe ein Problem beim Einrichten einer Eins-zu-Viele-Beziehung in meinem annotierten 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 hier falsch

mappedBy Verweis auf eine unbekannte Zielentitatseigenschaft
Pascal Thivent

Der mappedBy Attribut referenziert customer solange das Eigentum ist mCustomer, daher die Fehlermeldung. Ändern Sie Ihre Zuordnung also entweder in:

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

Oder ändern Sie die Entitätseigenschaft in customer (was ich machen würde).

Die mappedBy-Referenz gibt an: “Gehen Sie zur Bean-Eigenschaft namens ‘customer’ auf dem Ding, von dem ich eine Sammlung habe, um die Konfiguration zu finden.”

  • das funktionierte, ich hatte erwartet, dass es Reflection verwendet und die Setter- oder Getter-Methode und nicht die Eigenschaft direkt verwendet.

    – boyd4715

    25. Oktober ’10 um 3:11

  • @boyd4715: Sie könnten versuchen, Ihre Anmerkungen auf die Getter zu verschieben, um zu sehen, was passiert, wenn der Eigenschaftszugriff (im Vergleich zum Feldzugriff) verwendet wird. Auf der anderen Seite ist das Javadoc von mappedBy sagt Das Feld, das die Beziehung besitzt Daher bin ich mir nicht sicher, ob das etwas ändern wird.

    – Pascal Thivent

    25. Okt. 10 um 3:24 Uhr


  • Danke das hilft mir sehr

    – Osama Al-Banna

    8. Apr. ’17 um 16:25

  • Ich habe mappedBy verwendet, als die eigentliche Anforderung Joincolumn war lol

    – 10101010

    26. Februar ’21 um 18:12

  • Dies ist etwas, das aus allen Beispielen, die ich online gefunden habe, nicht klar hervorgeht. Danke, dass Sie das buchstabiert haben.

    – Steve

    10. Juni ’21 um 1:00

1641662935 661 mappedBy Verweis auf eine unbekannte Zielentitatseigenschaft
Dhyanesh

Ich weiß, dass die Antwort von @Pascal Thivent das Problem gelöst hat. Ich würde gerne etwas mehr zu seiner Antwort an andere hinzufügen, die möglicherweise in diesem Thread surfen.

Wenn Sie wie ich in den ersten Tagen des Lernens sind und sich mit dem Konzept der Verwendung des @OneToMany Anmerkung mit dem ‘mappedBy‘ Eigentum, es bedeutet auch, dass die andere Seite die @ManyToOne Anmerkung mit dem @JoinColumn ist der „Eigentümer“ dieser bidirektionalen Beziehung.

Ebenfalls, mappedBy nimmt die ein Instanzname (mCustomer in diesem Beispiel) der Class-Variablen als Eingabe und nicht die Klassen-Typ (Beispiel: Kunde) oder der Entitätsname (Beispiel: Kunde).

BONUS: Schauen Sie auch in die orphanRemoval Eigentum von @OneToMany Anmerkung. Wenn es auf “true” gesetzt ist und ein Elternteil in einer bidirektionalen Beziehung gelöscht wird, löscht Hibernate automatisch seine Kinder.

public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @Column(name = "USER_ID")
    Long userId;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "sender", cascade = CascadeType.ALL)
    List<Notification> sender;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "receiver", cascade = CascadeType.ALL)
    List<Notification> receiver;
}

public class Notification implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id

    @Column(name = "NOTIFICATION_ID")
    Long notificationId;

    @Column(name = "TEXT")
    String text;

    @Column(name = "ALERT_STATUS")
    @Enumerated(EnumType.STRING)
    AlertStatus alertStatus = AlertStatus.NEW;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "SENDER_ID")
    @JsonIgnore
    User sender;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "RECEIVER_ID")
    @JsonIgnore
    User receiver;
}

Was ich aus der Antwort verstanden habe. mapdy=”sender”-Wert sollte im Benachrichtigungsmodell gleich sein. Ich gebe dir ein Beispiel..

Benutzermodell:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "**sender**", cascade = CascadeType.ALL)
    List<Notification> sender;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "**receiver**", cascade = CascadeType.ALL)
    List<Notification> receiver;

Benachrichtigungsmodell:

@OneToMany(fetch = FetchType.LAZY, mappedBy = "sender", cascade = CascadeType.ALL)
    List<Notification> **sender**;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "receiver", cascade = CascadeType.ALL)
    List<Notification> **receiver**;

Ich habe dem Benutzermodell und dem Benachrichtigungsfeld eine fette Schriftart gegeben. Benutzermodell mappedBy=”Absender ” sollte gleich der Benachrichtigungsliste sein Absender; und mappedBy=”Empfänger” sollte gleich der Benachrichtigungsliste sein Empfänger; Wenn nicht, erhalten Sie einen Fehler.

.

185160cookie-checkmappedBy Verweis auf eine unbekannte Zielentitätseigenschaft

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy