Domanda

Sto ancora imparando come impostare questi mapping utilizzando le annotazioni APP quindi questo potrebbe essere un errore principiante.

Ho una classe utente e una classe del corso. Nel database Ogni corso ha una chiave esterna per l'utente in ogni riga (si pensi alla User come l'insegnante insegnamento del Corso). Così ogni utente può avere più corsi, ma Ogni corso ha un solo utente.

In mappare queste classi che ho scritto il seguente codice qui sotto:

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

}

Ho omesso i campi irrilevanti e la BaseModel solo conti per la chiave primaria in ogni tabella. C'è qualcosa che è palesemente sbagliato qui? se non quello che sarebbe un buon modo per andare sul debug un problema come questo.

sto ricevendo un NullPointerException quando provo a chiamare una select sulla tabella utente. Tuttavia, quando prendo i riferimenti alla Classe di corso in tutto classe User funziona perfettamente bene.

La linea in questione è nella mia classe DAO. Forse l'Ente gestore non riesce a inizializzare. Ecco il codice.

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

createQuery () solo restituisce:

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

Sto usando il framework Stripes, Hibernate, e Stripersist se che fornisce ulteriori indizi utili a capire ciò che è sbagliato.

È stato utile?

Soluzione

Fin dal primo sguardo, sembra essere il fatto che si dovrebbe scrivere:

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

I. e. in @OneToMany mappedBy deve indicare il campo che indica l'oggetto corrente.

Altri suggerimenti

mappedBy indica che l'entità di questa parte è l'inverso del rapporto, e il proprietario risiede nel "altro" entità. Nel tuo caso, come axtavt rispose dovrebbe essere:

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

afferma che l'utente può optare per i numerosi corsi e corso è portare la proprietà di questa relazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top