Java 在Hibernate中添加员工时出现NullPointerException
我有一个Hibernate实体“Intranet”,其代码如下: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 { @
// 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就会使用这个接口中的函数。界面背后到底是什么并不重要。