具有 null 值的 long 类型列的 JPA 实体
JPA entity with column of type long that have a Null value
我是 JPA 新手。我正在使用 spring 数据,我想创建一个实体 "File" (文件夹是一个 File )。每个文件都可以有一个父(或没有)。
这是我的 table 的列: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 值,我会遇到同样的问题。
我该如何解决?
您的 toString()
方法 "doesn't work" 因为您正在尝试获取空父级的 ID,这显然会导致 NullPointerException。在尝试获取和打印其 ID 之前,您需要测试父级是否为 null。阅读异常的消息、类型和堆栈跟踪可以让您找出这一点。也使用调试器。
long
类型的变量不能保存 null
。基本类型不可为空。所以你需要为这个字段使用类型java.lang.Long
。
我是 JPA 新手。我正在使用 spring 数据,我想创建一个实体 "File" (文件夹是一个 File )。每个文件都可以有一个父(或没有)。 这是我的 table 的列: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 值,我会遇到同样的问题。 我该如何解决?
您的 toString()
方法 "doesn't work" 因为您正在尝试获取空父级的 ID,这显然会导致 NullPointerException。在尝试获取和打印其 ID 之前,您需要测试父级是否为 null。阅读异常的消息、类型和堆栈跟踪可以让您找出这一点。也使用调试器。
long
类型的变量不能保存 null
。基本类型不可为空。所以你需要为这个字段使用类型java.lang.Long
。