我是JPA的新手。我使用的是Spring数据,我想创建一个实体" File" (文件夹是文件)。每个文件都可以有父(或不)。 这是我的表格列:id,name,path,mtime,parentid。
我在我的实体中使用了这个
@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(第一个文件)。(我在phpmyadmin上确认了)
我想显示线条,所以我这样做了:
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类型的新列并且其中一行在该列中具有NULL值,则会出现同样的问题。 我该如何解决这个问题?
答案 0 :(得分:2)
您的toString()
方法"无法使用"因为您正在尝试获取null父级的id,这显然会导致NullPointerException。在尝试获取并打印其ID之前,您需要测试父项是否为null。读取消息,键入和堆栈异常的跟踪将允许您找到它。也使用调试器。
long
类型的变量无法保留null
。原始类型不可为空。因此,您需要为此字段使用类型java.lang.Long
。