我仍然在学习如何使用JPA注解,这可能是一个初学者的错误设置这些映射。

我有一个用户类和课程类。每门课程都有每一行的用户外键的数据库(认为用户作为教师教学课程)。因此,每个用户可以拥有多个课程,但每个场只有一个用户。

在映射这些类我已经写以下以下代码:

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

}

我已经省略了不相关的字段和BaseModel只是占每个表中的主键。 有没有什么事情是公然错在这里?如果不是这将是一个很好的方式去调试一个问题是这样的。

<强>我收到一个NullPointerException当我尝试调用在用户表中选择。然而,当我拿出来Course类的引用在用户课堂上的一切工作完全正常。

所讨论的行是在我的DAO类。也许实体管理器无法初始化。下面的代码。

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

的createQuery()只是返回:

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

我使用的条纹框架,Hibernate和Stripersist如果提供任何进一步的线索,什么是错的。

有帮助吗?

解决方案

从一乍一看,这似乎是你应该写:

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

我。即在@OneToMany 的mappedBy 应指向字段,它指向当前对象。

其他提示

的mappedBy表明,在这一侧的实体的关系是的逆,以及所有者在驻留“其他”的实体。在你的情况下,作为axtavt回答应该是:

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

指出用户可以选择很多课程和课程是承载这个关系的所有权。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top