2009-12-27 91 views
1

我仍然在学习如何使用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只是占每个表中的主键。 这里有什么是公然错误的吗?如果不是什么将是一个好方法去调试这样的问题。

我在尝试调用用户表上的select时收到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; 

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

+0

他们,你没有告诉你的问题是什么 – Bozho 2009-12-27 19:36:40

+0

我得到了方面跟踪,并遗漏了最重要的部分。 – stewart 2009-12-27 19:44:27

+0

now,you did,show us the code that given the NullPointerException(find the code by the line number in the exception stacktrace) – Bozho 2009-12-27 19:45:28

回答

1

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

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

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

0

mappedBy表示此边的实体是关系的逆,并且所有者驻留在“其他”实体中。在你的情况,因为axtavt回答应该是:

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

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