2013-12-18 58 views
1

我有一個JPA實體的定義是這樣的:實體的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); 
    } 
} 
  1. 我得到老師的名單與實體管理器EJB範圍內命名查詢。
  2. 然後我用結果列表創建一個新的ArrayList,因爲JPA返回的結果列表是隻讀的。
  3. 我嘗試將學生添加到學生字段爲空的某些教師的學生字段中。然後我得到一個NullPointException,無論我試圖在該字段爲空時將新的ArrayList分配給該字段。看來,學生領域是可修改的。但其他字段如name是可修改的。

我已經使用Google搜索但沒有找到任何東西。希望有人對此有所瞭解。 非常感謝。

+0

一個多對多關係,每個領域有修改的,也是學生的名單。由於其他因素,您將得到NullPointerException。 –

回答

1

從一個stundent中刪除S以加入他。

this.students.add(student);

+1

哈哈,很好看 – Gab

+0

哦,我很抱歉。這是我的錯,因爲我的粗心大意,但不是這個問題的答案。謝謝:-)順便說一句,我糾正了拼寫錯誤。 – BlueMice

1

除了Big Bad Baerni的迴應之外,請確保您的學生擁有指定爲teacher的teacher屬性是此處關係的所有者。

public void addStudents(Student student) { 
    if(this.students == null){ 
     this.students = new ArrayList<Student>(); 
    } 
    student.setTeacher(this) 
    this.students.add(student); 
} 

In a bidirectional JPA OneToMany/ManyToOne association, what is meant by "the inverse side of the association"?

我不知道你的域名,但恕我直言,這裏應該有