`
dexter_leslie
  • 浏览: 65070 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论
  • marrymyy: 楼主总结的很好,学习了,就是代码怎么都没有空格断开,看着很不爽 ...
    interceptor

hibernate dynamic-update(转)

阅读更多

今天在update记录的时候遇到一个问题
我从数据库里查询出一条数据 并在页面显示出来 修改之
但是问题就出在表单提交之后了 我数据库中有很多字段 但是我更新的只有几个字段
如果用hibernate的update会更新所有的字段 包括没有发生变化的字段 也就是说会把你不想改变的字段全部清空
这样的话更新数据可是相当的麻烦 有没有简便的方法呢 ? 有 hibernate提供了dynamic-update属性 你只要设置为true就可以在更新的时候只更新发生改变的字段 其余字段保持数据库中的原有值。
但是这个dynamic-update=‘true’只在如下情况下有效:
1 同一个session中
Session s = openSession();
tx = s.beginTx();
User user = s.load(User.class, id);
user.setName('xuly');
tx.commit();
s.close();
Ok 这样只会更新name一个字段 其他的字段不会被更新
如果在session1中load一个po 然后在session2中 update 对不起 这样不管用
那么我跨session的时候能不能使用dynamic-update呢? 可以
用merge()

 

Hibernate允许我们在映射文件里控制insert和update语句的内容.比如在映射文件中<property 元素中的update属性设置成为false,那么这个字段,将不被包括在基本的update语句中,修改的时候,将不包括这个字段了.insert同 理.dynamic动态SQL语句的配置也是很常用的.下面介绍配置SQL语句的具体属性:
      1)<property>元素 insert属性:设置为false,在insert语句中不包含这个字段,表示永远不会被插入,默认true
      2)<property>元素 update属性:设置为false,在update语句中不包含这个字段,表示永远不会被修改,默认true
      3)<class>元素 mutable属性:设置为false就是把所有的<property>元素的update属性设置为了false,说明这个对象不会被更 新,默认true
      4)<property>元素 dynamic-insert属性:设置为true,表示insert对象的时候,生成动态的insert语句,如果这个字段的值是null就不会加入到 insert语句当中.默认false
      5)<property>元素 dynamic-update属性,设置为true,表示update对象的时候,生成动态的update语句,如果这个字段的值是null就不会被加入 到update语句中,默认false
      6)<class>元素 dynamic-insert属性:设置为true,表示把所有的<property>元素的dynamic-insert属性设置为 true,默认false
      7)<class>元素 dynamic-update属性:设置为true,表示把所有的<property>元素的dynamic-update属性设置为 true,默认false

      Hibernate生成动态SQL语句的消耗的系统资源(比如CPU,内存等)是很小的,所以不会影响到系统的性能,如果表中包含N多字段,建议把 dynamic-update属性和insert属性设置为true,这样在插入和修改数据的时候,语句中只包括要插入或者修改的字段.可以节省SQL语 句的执行时间,提高程序的运行效率.

分享到:
评论

相关推荐

    dynamic-insert,dynamic-update 我有话要说

    在Java的Hibernate ORM框架中,`dynamic-insert`和`dynamic-update`是两个非常重要的属性,它们主要用于优化数据库的插入和更新操作。这两个属性主要应用于实体类的映射文件(.hbm.xml)中,用于控制Hibernate如何...

    hibernate动态更新

    `hibernate`的`dynamic-update`属性提供了对此场景的一种解决方案。如果在`&lt;class&gt;`映射中设置了`dynamic-update="true"`,Hibernate会在生成的SQL更新语句中只包含实际被修改的字段,而不是所有字段。这可以显著...

    hibernate-mapping参数详解

    - **dynamic-update**: 是否动态更新 SQL 语句,仅更新修改过的字段。 - **dynamic-insert**: 是否动态插入 SQL 语句,仅插入非空字段。 - **select-before-update**: 更新前是否先查询实体。 - **polymorphism**: ...

    hibernate实体映射文件字段设置默认值

    - **动态插入和更新**:`dynamic-insert`和`dynamic-update`属性允许Hibernate只插入或更新那些确实发生更改的字段。这对于避免不必要的数据库操作非常有用。 - **默认值类型**:默认值表达式的类型应与列的数据类型...

    Hibernate插件教程

    例如,教程中提到的版本为 `jbosstools-3.2.1.Final.component--hibernatetools-Update-2011-08-01_12-53-33-H1305.zip`。 - **安装步骤**:下载后的压缩文件需解压并放入 Eclipse 的 `dropins` 目录下,并且需要...

    Hibernate笔记.doc

    在《精通Hibernate:Java对象持久化技术详解》的第4章以及后续章节中,主要探讨了如何通过映射配置来控制对象的插入(insert)和更新(update)行为,以及一对多关联关系的管理。 映射属性是Hibernate配置文件中的...

    常用 Hibernate 映射配置说明.doc

    - **dynamic-update**和**dynamic-insert**: 控制是否动态生成SQL更新和插入语句,基于只有修改过的字段。 - **select-before-update**: 在更新前是否先执行SELECT语句,确保并发安全。 - **polymorphism**: 控制...

    Hibernate 4.2.1 Release

    1. 创建新项目,选择"Dynamic Web Project"。 2. 添加Hibernate库,将`hibernate-release-4.2.19.Final`解压后,导入所需的jar文件到项目的类路径。 3. 配置`pom.xml`或`build.gradle`文件,添加Hibernate依赖。 4. ...

    hibernate关联映射的作用和常用属性解释

    - **`dynamic-update`**:设置为`true`时,只更新确实被修改过的字段,默认为`false`。 - **`dynamic-insert`**:设置为`true`时,只插入非空字段,默认为`false`。 - **`insert-before-update`**:设置为`true`时,...

    Hibernate 文档.doc

    &lt;class name="com.isoftstone.javasource.course" table="courses" dynamic-insert="true" dynamic-update="true"&gt; &lt;/hibernate-mapping&gt; ``` 上述示例展示了如何使用XML映射文件定义一个课程实体,指定其...

    hibernate说明文档

    - `dynamic-update`: 如果为`true`,则表示动态生成更新语句,只包含非空字段,避免不必要的更新操作。 4. **`&lt;class&gt;`** 元素用于定义类的映射。 - `mutable`: 如果为`false`,则相当于所有字段的`update`属性为...

    hibernate 详细配置

    &lt;property name="hibernate.hbm2ddl.auto"&gt;update &lt;property name="hibernate.jdbc.batch_size"&gt;20 &lt;/session-factory&gt; ``` - `hibernate.connection.*`:定义了数据库连接的详细信息。 - `hibernate.dialect...

    hibernate文档

    - **动态类型**:使用 `&lt;dynamic-insert&gt;` 和 `&lt;dynamic-update&gt;` 实现动态 SQL。 - **延迟加载**:通过 `&lt;lazy&gt;` 属性控制关联对象的加载时机。 ##### 4.5 Tuplizer - **目的**:解释 Tuplizer 的作用及其配置...

    hibernate保存图片

    dynamic-update="true" dynamic-insert="true" batch-size="3"&gt; column="id" type="java.lang.Integer"&gt; &lt;/hibernate-mapping&gt; ``` #### 七、Hibernate配置文件(hibernate.cfg.xml)设置 `...

    hibernate配置详细

    - **`dynamic-insert`** 和 **`dynamic-update`**: 这两个属性用于控制Hibernate是否动态地创建SQL插入和更新语句。默认情况下,这两个属性都是`false`。 - **`dynamic-update`**: 如果设置为`true`,则只更新那些...

    精通Hibernate第四章

    若要更新部分字段,可以使用`dynamic-insert`和`dynamic-update`属性,使Hibernate仅包含实际变化的字段生成SQL语句,提高效率。 处理SQL引用标识符是另一个重要的话题。在SQL中,特殊字符或包含空格的字段名需要...

    hibernate配置详解

    - `dynamic-update`:如果设为`true`,Hibernate仅在字段不为null时更新。 - `&lt;id&gt;`:定义主键映射。 - `name`:指定主键字段名称。 - `&lt;column&gt;`:定义数据库表中的列信息。 - `name`:指定列名。 - `length`...

    持久层hibernate详解

    - **`dynamic-update`**:布尔值,决定在更新记录时是否动态生成SQL语句。 - **`&lt;property&gt;`** 标签:用于指定实体类属性与数据库表列之间的映射。 - **`name`**:实体类中的属性名称。 - **`type`**:Hibernate...

    详解hibernate4基本实现原理

    - 动态生成 SQL 更新语句,根据 `hbm.xml` 文件执行,不检查脏数据(除非开启 `dynamic-update`)。 - **更新(merge())**: - `merge()` 会先在缓存中查找对象,如果找到则使用该对象进行脏数据检查,未找到则...

    CVS适用,及在MYECLISPE中发布

    ### CVS适用及其在MyEclipse中的发布 ...根据描述中的部分代码片段,可以看出这里涉及到的配置主要是指`dynamic-insert`和`dynamic-update`属性,它们用于控制Hibernate是否动态地插入或更新记录。例如: ```xml ...

Global site tag (gtag.js) - Google Analytics