Hibernate之dynamic-update
问题:设置了dynamic-update, 可是事实上并没有按照期望进行了update。
案例代码如下:
1、持久化对象
 package com.jdw.hibernate.entities;
 import java.util.Date;
 public class News {
     private Integer id;
     private String title;
     private String author;
     private Date date;
     public News() {
         // TODO Auto-generated constructor stub
     }
     public News(String title, String author, Date date) {
         super();
         this.title = title;
         this.author = author;
         this.date = date;
     }
     @Override
     public String toString() {
         return "News [id=" + id + ", title=" + title + ", author=" + author
                 + ", date=" + date + "]";
     }
     public Integer getId() {
         return id;
     }
     public void setId(Integer id) {
         this.id = id;
     }
     public String getTitle() {
         return title;
     }
     public void setTitle(String title) {
         this.title = title;
     }
     public String getAuthor() {
         return author;
     }
     public void setAuthor(String author) {
         this.author = author;
     }
     public Date getDate() {
         return date;
     }
     public void setDate(Date date) {
         this.date = date;
     }
 }
2、hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-3-8 20:08:39 by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
<class name="com.jdw.hibernate.entities.News" table="NEWS" lazy="false" select-before-update="true" dynamic-update="true">
<id name="id" type="java.lang.Integer" unsaved-value="110">
<column name="ID" />
<generator class="native" />
</id>
<property name="title" type="java.lang.String">
<column name="TITLE" />
</property>
<property name="author" type="java.lang.String">
<column name="AUTHOR" />
</property>
<property name="date" type="java.util.Date">
<column name="DATE" />
</property>
</class>
</hibernate-mapping>
3、测试代码
@Test
public void testDynamicUpdate() {
News news =new News(); news.setAuthor("test");//注意:这里只设置了test属性
news.setId(13); session.update(news);
}
4、结果
Hibernate:
select
news_.ID,
news_.TITLE as TITLE2_1_,
news_.AUTHOR as AUTHOR3_1_,
news_.DATE as DATE4_1_
from
NEWS news_
where
news_.ID=?
Hibernate:
update
NEWS
set
TITLE=?,
AUTHOR=?,
DATE=?
where
ID=?
hibernate并没有按照期望只update Author属性,而是更新了所有属性,其他属性肯定更新成了null,坏菜了!
网上查了资料,不少同学说要在设置dynamic-update的同时,设置select-before-update即可满足期望,注意上面的映射文件,是设置了该属性的。
那问题出在哪里?如何解决呢?
--------------------------------------------------------------------------------
先看另一段测试代码:
@Test
public void testDynamicUpdate2() {
News news =(News) session.get(News.class, 13); news.setAuthor("test");//注意:这里只设置了test属性 session.update(news);
}
结果如你所愿,只更新了author字段。两项比较,dynamic-update=true,只对持久化对象起作用,对于transient临时对象不起作用。至于为什么这么设计?求高人告之。
Hibernate之dynamic-update的更多相关文章
- org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
		org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua ... 
- 20.org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
		org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actua ... 
- 关于Hibernate级联更新插入信息时提示主键不为空的问题“org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 ”
		org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual ... 
- Hibernate: save, persist, update, merge, saveOrUpdate[z]
		[z]https://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate 1. Introduction In this ... 
- Hibernate merge和update的区别
		今天做了个测试,写了个测试用例来看看merge与update时控制台打印出来的日志有什么不一样.实体bean很简单,就id和name两个字段,接下来分别给出以下几种测试情形的控制台日志内容: 1. 数 ... 
- BIND9源码分析之 多个view的情况下如何做dynamic update
		BIND中view的存在提供了一种较好的智能DNS方案,BIND可以根据用户的来源IP为其返回不同的Resource Record. 但是关于DNS动态更新的RFC2136中并没有提及view(vie ... 
- hibernate.hbm2ddl.auto=update不能自动生成表结构
		在写上篇文章<spring整合springmvc和hibernate>的时候,曾遇到一个问题 INFO: Server startup in 8102 ms Hibernate: inse ... 
- Hibernate HQL的update方法详解
		虽然hibernate提供了许多方法对数据库进行更新,但是这的确不能满足开发需要.现在讲解一下用hql语句对数据进行更新. 不使用参数绑定格式String hql="update User ... 
- Hibernate不调用update却自动更新
		案例: TInfCustomer cus = (TInfCustomer) this.baseDao.getOne(helper); cus.setXXX cus .setXXX 不调用update也 ... 
- <property name="hibernate.hbm2ddl.auto">update</property> 问题
		其实这个hibernate.hbm2ddl.auto参数的作用主要用于:自动创建|更新|验证数据库表结构.如果不是此方面的需求建议set value="none".create:每 ... 
随机推荐
- asp.net 2.0 Session丢失问题
			可行的解决方法(本人已用): 1.Web.config文件修改sessionstate模式(默认为InProc) <sessionState mode="/> 2.开启ASP.N ... 
- C# 1作业 2广场砖面积  护栏长度
			作业1输入圆柱体的底面半径和高求体积 static void Main(string[] args) { //输入圆柱体的底面半径, ... 
- 转载:MyEclipse启动Tomcat缓慢的原因及解决办法
			转自linux公社 不知道朋友们是否有一种烦恼:有时候使用MyEclipse启动Tomcat十分缓慢,可能在几分钟前20秒以内,但现在却需要200秒开外:其间内存和CPU都被占用地厉害,而控制台的输出 ... 
- PHP中将对数据库的操作,封装成一个工具类以及学会使用面向对象的方式进行编程
			<?php class SqlTool { //属性 private $conn; private $host="localhost"; private $user=&quo ... 
- Linux06--Shell程序设计02  数据流重定向与管道
			包含3种数据流: •标准输入(stdin):代码为0,符号为<或<<; •标准输出(stdout):代码为1,符号为>或>>; •标准错误输出(stderr):代码 ... 
- Linux03--文件打包与解压
			参考了<鸟哥的Linux私房菜> 1.压缩命令 gzip(压缩)与zcat(解压并读出来) gzip 可以说是应用度最广的压缩命令了!目前 gzip 可以解开 compress, zip ... 
- gridview外边距
			马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?注册 x 本帖最后由 同舟 于 2013-9-30 11:44 编辑 最新项目需要个单行显示功能键 ... 
- WampServer下如何实现多域名配置
			原文:WampServer下如何实现多域名配置 之前在学习跨域的时候,我写过一篇叫做WampServer下使用多端口访问的文章,默认的 localhost 采用的是 80 端口,能使用多端口访问的核心 ... 
- java的深复制与浅复制
			今天座右铭-----浪费时间就等于慢性自杀 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原 来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复 ... 
- 弱类型语言中的0和空字符串(''或"")以及字符串'0'
			在弱类型语言(js/PHP)中, 当我们用==判断0和'0'以及空字符串(''或"")是否相等的时候, 返回的是true. 而且在PHP中, 当我们用==判断0和null是否相等的 ... 
