Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 实体的JPA集合字段是可修改的_Java_Jpa_Ejb_Entitymanager_Managed Bean - Fatal编程技术网

Java 实体的JPA集合字段是可修改的

Java 实体的JPA集合字段是可修改的,java,jpa,ejb,entitymanager,managed-bean,Java,Jpa,Ejb,Entitymanager,Managed Bean,我有一个定义如下的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, orph

我有一个定义如下的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);
    }
}
@实体
@表(name=“JPA\U教师”)
公共课堂教师实施iTacher{
@身份证
私有字符串id;
@列(name=“name”)
私有字符串名称;
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,orphan=true)
@JoinColumn(name=“TEACHER\u ID”,referencedColumnName=“ID”)
私人名单学生;
公共教师(){
超级();
}
公共教师(字符串名称){
超级();
this.name=名称;
}
公共字符串getId(){
返回id;
}
公共无效集合id(字符串id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公众学生名单{
留学生;
}
公立学校学生(名单学生){
这个。学生=学生;
}
公立学校学生(学生){
if(this.students==null){
this.students=new ArrayList();
}
this.student.add(student);
}
}
  • 我得到一个教师列表,其中包含EJB上下文中实体管理器的命名查询
  • 然后我用结果列表创建一个新的
    ArrayList
    ,因为JPA返回的结果列表是只读的
  • 我尝试将学生添加到一些学生字段为空的教师的学生字段中。然后我得到一个
    NullPointException
    ,不管我是否尝试在字段为null时为其分配一个新的
    ArrayList
    。学生字段似乎是可修改的。但是,
    name
    等其他字段是可修改的
  • 我在谷歌上搜索过,但什么也没找到。希望有人对此有所了解。
    非常感谢。

    删除一个特技凹痕末端的S以添加他


    this.student.add(student)

    除了Big Bad Baerni响应之外,请确保您的学生具有指定为学生是此处关系所有者的教师属性

    public void addStudents(Student student) {
        if(this.students == null){
            this.students = new ArrayList<Student>();
        }
        student.setTeacher(this)
        this.students.add(student);
    }
    
    public void addstudent(学生){
    if(this.students==null){
    this.students=new ArrayList();
    }
    学生教师(本)
    this.student.add(student);
    }
    


    我不知道你的领域,但我知道,这里应该有很多关系

    每个领域都是可以修改的,还有学生名单。因为其他原因,你得到了NullPointerException。哦,我很抱歉。这是我的错,因为我粗心大意,但不是这个问题的答案。谢谢:-)顺便说一句,我已经纠正了拼写错误。