Question

Je suis en train d'apprendre comment configurer ces applications en utilisant les annotations JPA si cela peut être une erreur débutant.

J'ai une classe d'utilisateurs et une classe de cours. Dans la base de données chaque cours a une clé étrangère utilisateur dans chaque ligne (pensez à l'utilisateur comme l'enseignant l'enseignement du cours). Ainsi, chaque utilisateur peut avoir plusieurs cours, mais chaque cours n'a qu'un seul utilisateur.

Dans la cartographie de ces classes, j'ai écrit le code ci-dessous:

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

}

J'ai omis les champs non pertinents et les comptes BaseModel juste pour la clé primaire dans chaque tableau. Y at-il quelque chose qui est manifestement mal ici? Sinon ce serait un bon moyen d'aller sur le débogage d'un problème comme celui-ci.

Je reçois un NullPointerException quand je tente d'appeler une sélection sur la table utilisateur. Cependant, quand je prends les références à la classe de cours dans la classe tout utilisateur fonctionne parfaitement bien.

La ligne en question est dans ma classe de DAO. Peut-être l'entité responsable ne parvient pas à initialiser. Voici le code.

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

CreateQuery () retourne juste:

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

J'utilise le cadre Stripes, Hibernate, et si Stripersist qui fournit d'autres indices quant à ce qui est faux.

Était-ce utile?

La solution

Dès le premier coup d'oeil, il semble que vous devriez écrire:

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

. e. dans @OneToMany mappedBy doit pointer vers le champ qui pointe vers l'objet courant.

Autres conseils

mappedBy indique que l'entité de ce côté est l'inverse de la relation, et le propriétaire réside dans l'entité « autre ». Dans votre cas, comme axtavt réponse devrait être:

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

indique que l'utilisateur peut opter pour de nombreux cours et cours portant est la propriété de cette relation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top