我为某些Clazz进行了休眠映射,并为此建立了多对一关系:
<property name="entityId" column="ENTITY" type="java.lang.Long"/>
<many-to-one name="entity" column="ENTITY" class="Entity" insert="false" update="false"/>
更新,插入(可选-默认为true):指定映射的列应包含在SQL UPDATE和/或INSERT语句中。将两者都设置为false可允许使用纯的“派生”属性,其值是通过映射到同一列的其他某个属性或通过触发器或其他应用程序初始化的。
因此,然后我尝试使用新实体更新Class,我只设置了新的entityId字段并调用session.saveOrUpdate(clazz)
-一切都按预期工作,并且在数据库中设置了新实体。
但是,如果我尝试使用
设置为空(删除Clazz <->实体关系)clazz.setEntityId(null)
然后,数据库中相应的COLUMN不会更新,并且在检索下一条记录时,我仍然会获得旧的非空实体。
为了进行实验,我也尝试将实体对象设置为null(clazz.setEntity(null)
),并且-令人惊讶! -奏效了!
为什么会发生这种情况?设置为null是否等于Hibernate的更新?
另外:在数据库层上,我没有影响该属性的类似触发器的机制。
休眠版本-3.6.10.Final
OpenJDK 1.8.0_191