JPA返回我的实体,只填充了id,所有其他字段都为null(由调试器验证)。它通过使用JPA查询在另一列上进行搜索来获取实体,这导致实体的id为13(这是正确的)但其余的字段已填充并定义在db不为null,任何关于为什么会发生这种情况的想法都会很棒。
[我列出了一堆代码,但由于它没有对答案做出贡献(更确切地说是问题)我删除了它。]
答案 0 :(得分:0)
最初我收到的错误是" org.hibernate.PropertyAccessException: Null value was assigned to a property of primitive type setter of
"但是问题是实体正在为所有字段分配空值但是id(它们当然不是空的并且不能通过约束)。
问题是我编辑了数据库模式,使时间戳字段不为空,但MariaDB(MySQL)已经分配了00:00:00'到那个专栏。由于某种原因,没有生成错误或警告,它只是愉快地返回了一个只设置了id(主键)的实体!
当我试图坚持时,我只发现了我的错误,它告诉我必须坚持现在需要的时间戳字段,在更新用于保存实体的方法后,我查看了db的内容并发现了错误(包含' 0000-00-00 00:00:00')的列。
答案 1 :(得分:0)
最近我也遇到了这个问题,看来spring数据做了某种实例化。
我只是将层叠类型从MERGE更改为PERSIST,问题解决了。 由于Persist和merge是为了保留某个对象的一个托管实例而设计的。如果使用persist,则意味着该对象尚不存在,因此使其成为唯一的托管实例也不会受到损害。
使用合并时,要考虑到对象的托管实例可能已经存在。您不想替换该唯一的托管实例,因为某些其他对象可能会引用它,并认为它是托管对象。