列类型为long且具有空值的JPA实体
我是JPA的新手。我正在使用spring数据,我想创建一个实体“文件”(文件夹就是一个文件)。每个文件都可以有一个父级(或没有父级)。 这是我的表的列:id、name、path、mtime、parentid 我在我的实体中使用了这个列类型为long且具有空值的JPA实体,jpa,null,long-integer,Jpa,Null,Long Integer,我是JPA的新手。我正在使用spring数据,我想创建一个实体“文件”(文件夹就是一个文件)。每个文件都可以有一个父级(或没有父级)。 这是我的表的列:id、name、path、mtime、parentid 我在我的实体中使用了这个 @ManyToOne @JoinColumn(name = "parentid") private File parent; public File() {} public File(String name, String path,File
@ManyToOne
@JoinColumn(name = "parentid")
private File parent;
public File() {}
public File(String name, String path,File parent) {
this.name = name;
this.path=path;
this.parent=parent;
}
@Override
public String toString() {
return String.format(
"File[ id=%d,name='%s', path='%s',parentid=%d]",
id,name, path,parent.id);
}
在我的测试中,我做到了:
fileRepository.save(new File("file1","file1",null));
File file1=fileRepository.findOne((long) 1);
fileRepository.save(new File("file2","file2",file1));
它插入了parentid为NULL的第一行和parentid为1的第二行(第一个文件)
我想展示台词,所以我这样做:
for (Object element : Lists.newArrayList(fileRepository.findAll())) {
System.out.println(element);
}
但它不起作用。
当我从toString()函数中删除parentid时,我得到了正确的结果:
File[ id=1,name='file1', path='file1']
File[ id=2,name='file2', path='file2']
如果我添加一个Long类型的新列,并且其中一行在该列中有空值,我会遇到同样的问题。
如何修复此问题?您的toString()
方法“不起作用”,因为您试图获取空父级的id,这显然会导致NullPointerException。在尝试获取和打印其ID之前,您需要测试父项是否为null。读取异常的消息、类型和堆栈跟踪将允许您找到这一点。也可以使用调试器
long
类型的变量不能保持null
。基元类型不可为空。因此,您需要对该字段使用类型java.lang.Long