Hibernate JPA正在返回仅填充id的my entity,所有其他字段均为空

Hibernate JPA正在返回仅填充id的my entity,所有其他字段均为空,hibernate,jpa,mariadb,Hibernate,Jpa,Mariadb,JPA正在返回仅填充id的my entity,所有其他字段均为null(由调试器验证)。它通过使用JPA查询在另一列上进行搜索来获取实体,这会导致实体的id为13(这是正确的),但其余字段在db中填充并定义为NOTNULL,任何关于为什么会发生这种情况的想法都非常好 [我列出了一堆代码,但由于它对答案没有帮助(更准确地说,是问题),我将其删除。]最初,我收到一个错误“org.hibernate.PropertyAccessException:Null值被分配给了一个原语类型setter为的属性”

JPA正在返回仅填充id的my entity,所有其他字段均为null(由调试器验证)。它通过使用JPA查询在另一列上进行搜索来获取实体,这会导致实体的id为13(这是正确的),但其余字段在db中填充并定义为NOTNULL,任何关于为什么会发生这种情况的想法都非常好


[我列出了一堆代码,但由于它对答案没有帮助(更准确地说,是问题),我将其删除。]

最初,我收到一个错误“
org.hibernate.PropertyAccessException:Null值被分配给了一个原语类型setter为的属性
”然而,问题是实体将空值分配给除id之外的所有字段(id肯定不是空的,并且根据约束不能是空的)

问题是我编辑了DB模式,使时间戳字段不为空,但MariaDB(MySQL)已将“0000-00-00:00:00”分配给该列。由于某些原因,没有生成错误或警告,它只是愉快地返回了一个只设置了id(主键)的实体


我只是在尝试持久化时才发现错误,它告诉我必须持久化现在需要的时间戳字段,在更新用于保存实体的方法后,我查看了数据库的内容并发现了错误(包含“0000-00-00 00:00:00”的列)。

我最近也遇到了这个问题,看起来spring数据进行了某种实例化

我只是将级联类型从MERGE改为persistent,我的问题就解决了。 因为Persist和merge是用来保存某个对象的一个托管实例的。如果使用Persist,则意味着该对象还不存在,因此将其设置为唯一的托管实例不会有什么坏处


使用“合并”时,需要考虑对象的托管实例可能已经存在。您不想替换那个唯一的托管实例,因为其他对象可能会引用它,认为它就是托管对象。

我不确定这个问题是否应该解决,这很不寻常,有很多重复的“org.hibernate.PropertyAccessException:Null值被分配给了基元类型setter为的属性”但是,分配包装器类型无法解决此问题。还有一些人坚持原语类型应该是有效的,在本例中它们是有效的,这意味着其他人可能已经看到了这一点,但没有找到解决方案。除非有人能找到这个案子的副本。