当前位置: 首页 > 面试题库 >

Hibernate:脏检查并且仅更新脏属性?

公孙宸
2023-03-14
问题内容

在“旧的JDBC美好时光”中,我编写了许多SQL代码,这些代码仅针对实际上已更改的“属性/成员”进行了针对性的更新:

例如,考虑具有以下成员的对象:

public String name;
public String address;
public Date date;

如果仅date在某些业务方法中进行了更改,我将只UPDATE为该date成员发出一个SQL 。

但是,似乎(这是我对Hibernate的“印象”)在使用标准Hibernate映射(映射完整类)时,即使仅单个成员的更新也会导致Hibernate生成的SQL语句中对象的完整更新。

我的问题是:

  1. 这种观察是正确的吗,Hibernate 不会 智能地检查(在完全映射的类中)更改了哪些成员,然后仅针对特定的已更改成员发布更新,而是始终会进行更新(在生成的SQL Update语句中)所有(类的)映射成员,即使它们没有更改(如果对象由于一个成员变脏而变脏了……)

  2. 如何使Hibernate仅更新已更改的那些成员?我正在寻找一种让Hibernate仅更新实际更改的成员的解决方案。

(我知道Hibernate在脏检查方面做了很多工作,但是据我所知,这种脏检查仅与确定对象整体是否脏有关,而不是单个成员是否脏。)


问题答案:

其实,你可以指定的选项dynamic-update,并dynamic- insert在类的映射。它就是这样做的。更多信息在这里。



 类似资料:
  • 问题内容: 在“旧的JDBC美好时光”中,我编写了许多SQL代码,这些代码仅针对实际更改的“属性/成员”进行了针对性的更新: 例如,考虑具有以下成员的对象: 如果仅在某些业务方法中进行了更改,我将只为该成员发出一个SQL 。 但是,似乎(这是我对Hibernate的“印象”)在使用标准Hibernate映射(映射完整类)时,即使仅单个成员的更新也将导致由Hibernate生成的SQL语句中对象的完

  • 几天来我一直在想办法解决这个问题。糟糕的是,hibernate没有提供ready to use annotation来将属性排除在脏检查之外。问题是,我有一节课,如下所示

  • 本文向大家介绍AngularJS的脏检查深入分析,包括了AngularJS的脏检查深入分析的使用技巧和注意事项,需要的朋友参考一下 写在开头 关于Angular脏检查,之前没有仔细学习,只是旁听道说,Angular 会定时的进行周期性数据检查,将前台和后台数据进行比较,所以非常损耗性能。 这是大错而特错的。我甚至在新浪前端面试的时候胡说一通,现在想来真是羞愧难当! 没有深入了解就信口开河实在难堪大

  • 我在试验Eclipselink。我正在尝试更新数据库中的一个现有实体。JPA实体只有公共字段,字段使用JPA注释进行注释。代码使用加载实体。 代码创建JPA实体的实例,为实体的公共字段赋值,并调用EntityManager.merge(entity)方法。Eclipselink不更新数据库记录。我启用了log来查看Eclipselink是否发出SQL语句。 Eclipselink不发出任何upda

  • a.它是如何工作的? b。它是否保存?比较两棵树是不是很贵? React不直接操作部件。 A.指的是什么?

  • 问题内容: 我正在使用Hibernate 4.3.6,并且使用了最新的Maven字节码增强功能来检测所有实体是否具有自我污染意识。 我添加了Maven插件: 而且我看到我的实体得到了增强: 调试时,我正在检查方法: 并且始终返回 false 。 这是因为始终为null,因此在设置任何属性时: 由于为null,将绕过trackChange,因此字节码增强功能将无法解析脏属性,并且将使用默认的深度比较