【发布时间】:2013-12-18 07:52:33
【问题描述】:
我有一个 JPA 实体,其定义如下:
@Entity
@Table(name = "JPA_TEACHER")
public class Teacher implements ITeacher{
@Id
private String id;
@Column(name = "NAME")
private String name;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
@JoinColumn(name="TEACHER_ID", referencedColumnName="ID")
private List<Student> students;
public Teacher() {
super();
}
public Teacher(String name) {
super();
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
public void addStudents(Student student) {
if(this.students == null){
this.students = new ArrayList<Student>();
}
this.students.add(student);
}
}
- 我通过 EJB 上下文中的实体管理器获得了一个带有命名查询的教师列表。
- 然后我用结果列表创建一个新的
ArrayList,因为 JPA 返回的结果列表是只读的。 - 我尝试将学生添加到一些学生字段为空的教师的学生字段中。然后我得到一个
NullPointException,无论我是否尝试在该字段为空时为其分配一个新的ArrayList。似乎学生领域是可修改的。但是name等其他字段是可以修改的。
我用谷歌搜索过,但一无所获。希望有人对此有所了解。 非常感谢。
【问题讨论】:
-
每个字段都可以修改,学生列表也是如此。由于其他原因,您会收到 NullPointerException。
标签: java jpa ejb entitymanager managed-bean