Spring Data JPA save()抛出NPE

时间:2013-11-14 12:56:57

标签: spring spring-data spring-data-jpa

我使用spring数据jpa编写了一个带有spring boot的web服务来实现持久性。 Web服务有一些静态对象(在Singleton Bean中),需要将常规备份备份到我的数据库。

有时! (当我打电话时,这很糟糕......我真的不知道会发生什么)

ObjectType updated = myRepository.save(existingObject)

我得到一个java.lang.NullPointerException - 没有可用的堆栈跟踪,因为执行此操作的方法是通过@Scheduled运行的。 我试过调试和existingObject似乎绝对没问题。只有当existingObject实际上不是新对象时(即当id!= 0时)

,才会出现错误

P.S。我使用的是Spring Boot,因此并没有真正使用EntityManager。我只使用@Autowired myRepository。

2 个答案:

答案 0 :(得分:1)

我看到类似的事情正在发生。在保存期间,似乎从DB重新获取了对象(也许是看哪个字段被更改了),但是并没有加载ManyToOne关系(即使FetchType被显式设置为EAGER)。 由于某种原因,在该关系上调用了compareTo。相关对象不为空,但仅填写其ID(大概是因为从数据库中获取的对象中有该ID)。所有其他字段为空。 当compareTo然后执行其工作时,将出现NullPointerException。

关于实际的解决方案,我还不知道,因为我期望FetchType EAGER确保已加载该关系。希望这可以帮助某人进一步找到根本原因。

(我会将此添加为评论,因为它实际上无法回答问题,但是由于信誉不足,StackOverflow不会让我...)

答案 1 :(得分:0)

您没有提供足够的信息。如果该行是NullPointerException正在发生的地方,则唯一的可能性是myRepository为null,或者existingObject为null。但是,由于保存中的某些内容,可能会发生NullPointerException。将代码包装在try catch中,并将异常堆栈跟踪记录到文件中。

如果需要,请在此处查看日志记录自定义说明: