当前位置: 首页 > 知识库问答 >
问题:

Eclipselink在实体字段未更改时更新该字段

萧业
2023-03-14

我有两个实体具有@OneTomany(Entity1)&@ManyToOne(Entity2)双向关系。在@OneTomany关系中,我有@Cascading{Cascade.All}。但是当我在事务或方法中将具有@ManyToOne关系的实体的初始为false的boolean属性更改为true,然后又变回false时,它会导致数据库触发更新查询,将实体的boolean设置为false,这似乎是错误的,因为它初始为false并且在提交时仍然为false。我使用Eclipselink2.5.1作为jpa实现。什么是原因?

update(Integer entityId) {
    tx.begin();
    Entity1 entity1 = findEntity(entityId);
    for(Entity2 entity2 : entity1.getEntity2List()) {
        entity2.setBooleanProperty(Boolean.TRUE);//which is initially false, we set it to true for programmatic purpose ;
        ...
        entity2.setBooleanProperty(Boolean.FALSE);//at this point db updates boolean property to false
    }
    em.merge(entity1);
    tx.commit();
}

共有1个答案

甘骞尧
2023-03-14

所以我猜EclipseLink只是将第一个更改标记为要“更改”的字段。可能没有逻辑来保存原始值并因此检查是否将其重置为原始值(必须保存所有字段的所有原始值将是一个很大的开销)。

因此,当您合并对象时,该字段标记为在分离时已更改。因此,它在数据存储中得到更新。不能说它是“错误的”,因为它是在存储所有字段的所有原始值和添加检查之间进行权衡,而不是针对单个数据存储更新语句(并且用户手中有它,可以通过只更新要与该值合并的字段来获得他们所希望的行为)。

 类似资料:
  • 我想实现,让我们说温度单位转换器。我想使用AndroidMVVM和数据绑定来做到这一点,但我不知道如何。我有一个片段,它由三个编辑文本字段组成:摄氏度,华氏度,开尔文。更改其中之一后,其余部分应自动更新。在没有数据绑定的情况下,我将 TextWatcher 设置为每个字段,并在 onTextChanged 中执行所有验证和转换逻辑,并设置其他字段的值。在之前文本更改中,我删除了其他字段的侦听器,并

  • 假设我有一个包含16到20个字段的表单,包括输入类型文本和文本区域。 表单使用POST方法将字段提交到php页面,该页面使用$\u POST变量更新数据库中的表。 我的问题是我只想更新数据库中更改的值,而不是更新每个值, 这种优化应用程序的方法有多好?,我也在另一个网站上读到以下答案: mySQL会自动检测到您正在更新一个与它已经包含的值相同的字段,并且实际上不会更新该字段。不确定这是否与其他数据

  • 我正在使用Android MVVM架构和LiveData。我有一个这样的物体 我的视图模型是这样的 如何确保用户对象中的某个字段发生更改时,观察员收到通知?顺便说一句,重要的是要将这些数据保存在单独的对象中,而不是在ViewModel中使用字符串等主要值。

  • 以下是我要保存(创建/更新)的实体模型: 有两种方法可以更新此实体: < li >第一个更新除< code>notified属性以外的所有属性的人 < li >第二个更新< code>notified属性的仅 有没有办法告诉Hibernate忽略某个特定方法的某些字段?我需要创建两个不同的特定dao方法吗?我是否需要为经典的< code>save方法保留< code>updatable=false

  • 我正在尝试用Angular构建一个简单的计算器,如果我想的话,我可以覆盖总数。我有这部分的工作,但当我回去输入一个数字在一个或两个领域的总数没有在该领域的更新。 这是我的jsfiddlehttp://jsfiddle.net/YUza7/2/ 形式 javascript

  • 我正在编写一个应用程序,它使用PDFbox库来填充PDF文件中的字段。 在其中一个字段中,我将文本设置为希伯来字母。 当我在Android设备上运行代码时,我会得到以下日志: 我试图在堆栈溢出中找到一些关于它的信息,但我找到的答案都与填充表单有关。它都与有关。 你能帮我解决这个错误并用PDFBox在表格中填写希伯来字母吗?