使用JPA将某些字段的值设置为null

akp*_*akp 7 merge jpa

在jpa合并中,所有coumns都更新了,还是只有具有新值的列?

在更新时,如果我将某个属性的值设置为null,那么null值是否会存储在db中的cloumn中,还是会保留以前的值?

Pas*_*ent 4

当合并实体 X 时, X 的整个状态将被“合并”(当然,如果 X 是有效的“候选者”)。JPA 1.0 规范是这样描述的:

3.2.4.1 合并分离实体状态

合并操作允许将状态从分离的实体传播到 EntityManager 管理的持久实体上。

应用于实体X的合并操作的语义如下:

  • 如果 X 是分离实体,则X 的状态将复制到具有相同身份的预先存在的受管实体实例 X' 上,或者创建 X 的新受管副本 X'。
  • 如果X是新的实体实例,则创建新的被管理实体实例X',并且X的状态被复制到新的被管理实体实例X'中。
  • 如果 X 是已删除的实体实例,则IllegalArgumentException合并操作将抛出 an (否则事务提交将失败)。
  • 如果 X 是托管实体,则合并操作将忽略它,但是,如果这些关系已使用级联元素值或 cascade=MERGE注释进行注释,则合并操作将级联到 X 中的关系引用的实体cascade=ALL
  • 对于由具有级联元素值cascade=MERGE或 的 X 的关系引用的所有实体 Y cascade=ALL,Y 被递归合并为 Y'。对于 X 引用的所有此类 Y,X' 被设置为引用 Y'。(请注意,如果 X 是托管的,则 X 与 X' 是同一对象。)
  • 如果 X 是合并到 X' 的实体,并引用另一个实体 Y,其中 未指定cascade=MERGEcascade=ALL,则从 X' 导航相同的关联会产生对具有与 Y 相同持久标识的托管对象 Y' 的引用。

持久性提供程序不得合并尚未获取的标记为 LAZY 的字段:合并时必须忽略此类字段。

Version实体使用的任何列都必须在合并操作期间和/或刷新或提交时由持久性运行时实现进行检查。如果没有Version列,则持久性提供程序运行时在合并操作期间不会进行额外的版本检查。