Pregunta

Todavía estoy aprendiendo cómo configurar estas asignaciones utilizando las anotaciones JPA por lo que este puede ser un error de principiante.

Tengo una clase de usuario y una clase de golf. En la base de datos Cada curso tiene una clave externa usuario en cada fila (pensar en el usuario como el profesor que enseña el Curso). Por lo que cada usuario puede tener varios cursos, pero cada curso tiene un solo usuario.

En la cartografía de estas clases que he escrito el siguiente código a continuación:

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

}

Me han omitido los campos irrelevantes y la BaseModel solo da cuenta de la clave principal en cada tabla. ¿Hay algo que es evidentemente mal aquí? Si no es así lo que sería una buena manera de ir sobre la depuración de un problema como este.

Estoy recibiendo una NullPointerException cuando trato de llamar a una selección en la tabla de usuario. Sin embargo, cuando tomo las referencias a la clase de golf en el que todo clase de usuario funciona perfectamente bien.

La línea en cuestión está en mi clase DAO. Tal vez el gestor de entidades está fallando para inicializar. Aquí está el código.

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

CreateQuery () devuelve sólo:

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

Estoy utilizando el marco de rayas, Hibernate, y si Stripersist que proporciona alguna pista más en cuanto a lo que está mal.

¿Fue útil?

Solución

Desde la primera vista, parece ser que usted debe escribir:

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

I. mi. en @OneToMany mappedBy debe apuntar al campo que apunta al objeto actual.

Otros consejos

mappedBy indica que la entidad en este lado es la inversa de la relación, y reside el propietario en la "otra" entidad. En su caso, como axtavt respondió debe ser:

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

estados que el usuario puede optar por muchos cursos de golf y está llevando a la propiedad de esta relación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top