Frage

Ich bin immer noch lernen, wie man diese Zuordnungen einzurichten, die JPA Annotationen verwenden so ist dies ein Anfänger Fehler sein kann.

ich eine User-Klasse und eine Kurs-Klasse. In der Datenbank jeder Kurs einen Benutzerfremdschlüssel in jeder Reihe hat (man denke an die Benutzer als der Lehrer den Kurs unterrichtet). So hat jeder Benutzer kann mehrere Kurse, aber jeder Kurs hat nur einen Benutzer.

Diese Klassen sind in Abbildung Ich habe den folgenden Code geschrieben unter:

@Entity
public class User extends BaseModel {

 @OneToMany(mappedBy="course")
 private Collection<Course> courses;

 public void setCourses(Collection<Course> courses) { this.courses = courses; }

 public Collection<Course> getCourses() { return courses; }

}

@Entity
public class Course extends BaseModel {

 @ManyToOne
 @JoinColumn(name="user_id")
 private User user;

 public void setUser(User user) { this.user = user; }

 public User getUser() { return user; }

}

Ich habe die nicht relevanten Felder weggelassen und die Basemodel-Konten nur für den Primärschlüssel in jeder Tabelle. Gibt es etwas, das offensichtlich falsch hier? Wenn nicht, was wäre eine gute Möglichkeit zum Debuggen ein Problem wie dieses zu gehen.

Ich erhalte eine Nullpointer wenn ich versuche, auf der Benutzertabelle eine Auswahl zu nennen. Allerdings, wenn ich die Verweise auf den Kurs Klasse in dem User-Klasse alles nehmen funktioniert völlig in Ordnung.

Die fragliche Zeile ist in meiner DAO-Klasse. Vielleicht ist der Entity-Manager Fehler zu initialisieren. Hier ist der Code.

Query query = Stripersist.getEntityManager().createQuery(getQuery(fieldName, null)).setParameter(fieldName, value);

Create () gerade Rückkehr:

String query = "FROM " + entityClass.getName() + " t WHERE t." + fieldName + " = :" + fieldName;

Ich bin mit dem Streifen Rahmen, Hibernate und Stripersist wenn das liefert weitere Hinweise darauf, was falsch ist.

War es hilfreich?

Lösung

Vom ersten Blick scheint es zu sein, dass Sie schreiben sollen:

@OneToMany(mappedBy="user") 
private Collection<Course> courses; 

ich. e. in @OneToMany mappedBy auf das Feld, die Punkte auf das aktuelle Objekt.

anweisen

Andere Tipps

mappedBy zeigt an, dass das Unternehmen in dieser Seite ist die Umkehrung der Beziehung, und der Besitzer wohnt in der „anderen“ Einheit. In Ihrem Fall, wie axtavt beantwortet werden soll:

@OneToMany(mappedBy="user")
private Collection<Course> courses;

besagt, dass Benutzer für viele Kurse entscheiden können und Kurs auf das Eigentum dieser Beziehung trägt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top