我仍在学习如何使用 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。但是,当我在 User 类中取出对 Course 类的引用时,一切正常。
有问题的行在我的 DAO 课程中。也许实体管理器无法初始化。这是代码。
Query query = Stripersist.getEntityManager().createQuery(getQuery(fieldName, null)).setParameter(fieldName, value);
createQuery() 只返回:
String query = "FROM " + entityClass.getName() + " t WHERE t." + fieldName + " = :" + fieldName;
我正在使用 Stripes 框架、Hibernate 和 Stripersist,如果这提供了任何关于错误的进一步线索。