访问新合并记录JPA、实体管理器时出现NullPointer异常

访问新合并记录JPA、实体管理器时出现NullPointer异常,jpa,entitymanager,Jpa,Entitymanager,我有两个实体,实体申请人,实体职位申请。关系是 //Entity Applicants public class AppPers implements Serializable { @OneToMany(cascade = CascadeType.ALL, mappedBy = "appPers",fetch = FetchType.EAGER) private Collection<JobApplications> jobApplicationsCo

我有两个实体,实体申请人,实体职位申请。关系是

    //Entity Applicants
    public class AppPers implements Serializable {
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "appPers",fetch = FetchType.EAGER)
    private Collection<JobApplications> jobApplicationsCollection;
    .........................
    }

    //Entity JobApplications
    public class JobApplications implements Serializable {
    @JoinColumn(name = "app_id", referencedColumnName = "APP_ID", insertable = false,         updatable = false)
    @ManyToOne(optional = false,fetch = FetchType.EAGER)
    private AppPers appPers;
并尝试执行

    //fetch the newly created list
    List<JobApplications> list  = new ArrayList<JobApplications>();
    list = em.createNamedQuery("JobApplications.findAll").getResultList();
    //list size is 3 in my case
    for( JobApplications ja: list) {
    String a = ja.getAppPers().getSurName();
    }
//获取新创建的列表
列表=新的ArrayList();
list=em.createNamedQuery(“JobApplications.findAll”).getResultList();
//在我的例子中,列表大小是3
适用于(工作申请:列表){
字符串a=ja.getAppPers().getnam姓氏();
}

姓氏是AppPers的一列,我得到了null指针异常。这种情况会一直发生,直到我重新启动Glassfish,空指针才出现。我已经试着把取景设置为热切,但仍然没有乐趣。我可能遗漏了什么

我不知道这与JPA有什么关系。这是普通的旧Java。您有一个定义为的类

public class JobApplications implements Serializable {
    private AppPers appPers;
    ...
}
字段的默认值为
null

所以如果你这样做了

JobApplications ja = new JobApplications ();
AppPers ap = ja.getAppPers();
JobApplications ja = new JobApplications ();
String a = ja.getAppPers().getSurName();
ap
将为空。所以如果你这样做了

JobApplications ja = new JobApplications ();
AppPers ap = ja.getAppPers();
JobApplications ja = new JobApplications ();
String a = ja.getAppPers().getSurName();

您将得到一个NullPointerException。

循环什么的集合?如果您想让我们在某些代码中找到bug,请向我们展示有bug的代码。不是一些不相关、不同的code.list=em.createNamedQuery(“JobApplications.findAll”).getResultList();对于(JobApplications j:list){String a=j.getAppPers().getnam姓氏()}不要在注释中发布代码。编辑你的问题。说清楚。显示真实的相关代码。告诉我们哪些部分在单独的事务中,哪些部分在同一事务中。您的代码仍然会创建一个新的JobApplications,并希望其appPers字段神奇地初始化。你明白什么是新的吗?我的错..我想说的也是,因为你的关系是可插入的=false,可更新的=false,JPA不会正确处理它。当您对一个列使用多个绑定时,应该使用这些绑定,例如多对多外键。对于您的信息,thanx很有意义,我们将寻找解决方法。