具有Null类型的列的JPA实体具有Null值

时间:2015-04-11 20:52:18

标签: jpa null long-integer

我是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值,则会出现同样的问题。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

您的toString()方法"无法使用"因为您正在尝试获取null父级的id,这显然会导致NullPointerException。在尝试获取并打印其ID之前,您需要测试父项是否为null。读取消息,键入和堆栈异常的跟踪将允许您找到它。也使用调试器。

long类型的变量无法保留null。原始类型不可为空。因此,您需要为此字段使用类型java.lang.Long