Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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 在Hibernate中添加员工时出现NullPointerException_Java_Hibernate_Nullpointerexception - Fatal编程技术网

Java 在Hibernate中添加员工时出现NullPointerException

Java 在Hibernate中添加员工时出现NullPointerException,java,hibernate,nullpointerexception,Java,Hibernate,Nullpointerexception,我有一个Hibernate实体“Intranet”,其代码如下: // Imports removed @Entity @Table(name = "intranets", uniqueConstraints = @UniqueConstraint(columnNames = "company_name")) @Cacheable @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Intranet { @

我有一个Hibernate实体“Intranet”,其代码如下:

// Imports removed

@Entity
@Table(name = "intranets", uniqueConstraints = @UniqueConstraint(columnNames = "company_name"))
@Cacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Intranet {

    @Id
    @Column(name = "INTRANET_ID")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int intranetId;

    @Column(name = "owner_id")
    private int ownerId;

    @Column(name = "setup_done")
    private boolean isSetUp = false;

    @Column(name = "company_name")
    private String companyName;

    @ElementCollection
    @CollectionTable(name = "employees")
    @Column(name = "employee")
    private List<Integer> employeeIds;


    public int getIntranetId() {

        return intranetId;
    }

    public void setIntranetId(int intranetId) {

        this.intranetId = intranetId;
    }

    public boolean isSetUp() {

        return isSetUp;
    }

    public void setSetUp(boolean isSetUp) {

        this.isSetUp = isSetUp;
    }

    public String getCompanyName() {

        return companyName;
    }

    public void setCompanyName(String companyName) {

        this.companyName = companyName;
    }

    public int getOwnerId() {

        return ownerId;
    }

    public void setOwnerId(int ownerId) {

        this.ownerId = ownerId;
    }

    public List<Integer> getEmployeeIds() {

        return employeeIds;
    }

    public void setEmployeeIds(List<Integer> employeeIds) {

        this.employeeIds = employeeIds;
    }

    public void addEmployee(int id) {
        this.employeeIds.add(id);
    }

    public void removeEmployee(int id) {
        this.employeeIds.remove(new Integer(id));
    }
}
//已删除导入
@实体
@表(name=“intranet”,uniqueConstraints=@UniqueConstraint(columnNames=“company_name”))
@可缓存
@缓存(用法=CacheConcurrencyStrategy.READ\u WRITE)
公共类内部网{
@身份证
@列(name=“INTRANET\u ID”)
@GeneratedValue(策略=GenerationType.AUTO)
私有内部网;
@列(name=“owner\u id”)
私有内部所有权;
@列(name=“设置完成”)
私有布尔值isSetUp=false;
@列(name=“公司名称”)
私有字符串companyName;
@元素集合
@CollectionTable(name=“employees”)
@列(name=“employee”)
私人名单雇员ID;
public int getIntranetId(){
返回内部网;
}
公共无效setIntranetId(int intranetId){
this.intranetId=intranetId;
}
公共布尔值isSetUp(){
返回设置;
}
公共无效设置(布尔值isSetUp){
this.isSetUp=isSetUp;
}
公共字符串getCompanyName(){
返回公司名称;
}
public void setCompanyName(字符串companyName){
this.companyName=companyName;
}
public int getOwnerId(){
返回所有者ID;
}
public void setOwnerId(int ownerId){
this.ownerId=ownerId;
}
公共列表getEmployeeIds(){
返回员工ID;
}
public void setemployeeid(列出employeeid){
this.employeeIds=employeeIds;
}
公共无效addEmployee(内部id){
this.employeeIds.add(id);
}
公共无效删除员工(内部id){
this.employeeIds.remove(新整数(id));
}
}
如您所见,我添加了两个不直接使用的方法,即getter和setter,但它们类似于方便方法,可以轻松访问集合和添加/删除员工

当我在程序中调用“addEmployee()”时,我得到一个简单的NullPointerException。问题基本上是如何将集合初始化为不具有
null
,因为我了解到Hibernate使用集合的内部实现,而不是简单地获取
ArrayList


提前感谢您的帮助。

您有一个
NullPointerException
,因为您必须自己初始化列表。使用哪种实现并不重要。这将解决您的问题:

@ElementCollection
@Column(name = "employee")
private List<Integer> employeeIds = new ArrayList<>();
@ElementCollection
@列(name=“employee”)
私有列表employeeIds=new ArrayList();

addEmployee()之前调用
setEmployeeIds()
。太酷了,谢谢。那么,关于Hibernate内部实现的不同于ArrayList和其他实现的信息是错误的吗?或者Hibernate只是将它设置为它的实现?我不知道你在哪里读到过,但我认为Hibernate不需要任何列表实现。我的意思是,只要我们提供实现列表的东西,hibernate就会使用这个接口中的函数。界面背后到底是什么并不重要。