[JAVA]Hibernate 有选择性的更新--控制insert和update语句

  Hibernate 有选择性的更新--控制insert和update语句

  项目请情景:Hibernate 更新部分字段。

  项目中Hibernate更新记录时,不想更新所有字段怎么办?如果更新页面将不需要显示的字段不列出来。则更新后,数据库中这些记录会被设置成null。原因(看下后台执行的SQL语句)如下:

  Hibernate在初始化阶段,会根据映射文件的映射信息,为所有的持久化类预定义insert、update、delete 、根据OID从数据库加载持久化类实例的select语句 的Sql语句。

  默认情况下,预定义的SQL语句中包含了表的所有字段。更新页面:如果不需要更新的字段没有显示的话。直接提交,则数据库中registerTime、 username会被置为null值。

  (常规更新的时候,更新页面不显示这几个字段。如果username不允许为空的话,

  根本不允许保存,更新报错。有一个办法是设置一个隐藏域。保存这个要传输的值。但是这样不是根本的解决办法!主键的id是要传送进去的。)

  下面的实例中 设置 username status registerTime userGroupId 不允许更新!

  解决办法:设置update、insert、mutable、dynamic-insert、dynamic-update 属性!

  可以参考后台打印输出的SQL。

  ①之前没有设置执行的SQL语句执行情况:

  Hibernate: update orderSys.dbo.order_user set userGroupId=?, username=?, password=?, sex=?, email=?, status=?, cellphone=?, mobialphone=?, registertime=?, number=?, name=?, QQ=? where id=? http://xinghuabailing.com sducc1122

  ②设置属性之后的SQL语句执行情况:

  Hibernate: update orderSys.dbo.order_user set password=?, sex=?, email=?, cellphone=?, mobialphone=?, number=?, name=?, QQ=? where id=?

  由此可见 更新成功!

  下面附上属性的介绍:

  update、insert、mutable、dynamic-insert、dynamic-update 属性作用如下表。

  属性作用

  <property>的insert属性 设置为false,则在insert语句中不包含该字段,即该字段永远不能被插入。默认值:true.

  <property>的update属性设置为false,则在update语句中不包含该字段,即该字段永远不能更新。默认值:true.

  <property>的mutable属性设置为false,则所有<property>元素的update属性为false,即该整个实例不能更新。默认值:true.

  <class>的dynamic-insert属性设置为true,则表示当保存一个对象时,会动态生成insert语句,insert语句中仅包含所有取值不为null的字段。默认值:false

  <class>的dynamic-update属性设置为true,则表示当更新一个对象时,会动态生成update语句,update语句中仅包含所有取值需要更新的字段。默认值:false

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值