Spring Data JPA save() 抛出 NPE

标签 spring spring-data spring-data-jpa

我用 Spring Boot 编写了一个 Web 服务,使用 spring data jpa 进行持久化。 Web 服务有一些静态对象(在 Singleton Bean 中),需要定期备份到我的数据库。

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

ObjectType更新= myRepository.save(existingObject)

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

附注我正在使用 Spring Boot,因此并没有真正使用 EntityManager。我只使用@Autowired myRepository。

最佳答案

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

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

(我会将此添加为评论,因为它实际上并没有回答问题,但由于声誉不足,StackOverflow 不会让我这样做......)

关于Spring Data JPA save() 抛出 NPE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19978220/

相关文章:

java - Spring Web应用程序内存分析的疑惑

java - Oracle 重命名列名后出现无效标识符错误

java - 非法参数异常 : No visible constructors in class TestDatabaseAutoConfiguration$EmbeddedDataSourceFactoryBean

java - 如何删除实体列表

spring - 没有@RequestParam,参数绑定(bind)如何/为什么工作?

java - Spring MVC中拦截器和过滤器的区别

spring-boot - 按日期值筛选列表

mongodb - Spring数据MongoDb配置

database - 禁用外键取消引用 Hibernate

java - Spring Integration - 如何通过同一连接实现异步 TCP 套接字请求/响应?