具有 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