• 控制insert和update语句


    控制insert和update语句

    Hibernate在初始化阶段,就会根据映射文件的映射信息,为所有的持久化类预定义以下SQL语句:

    • insert语句,例如Person类的insert语句如下:

    insert into person(id,name,age,address) values(?,?,?,?)

    • update语句,例如Person类的update语句如下:

    update person set id=?,name=?,age=?,address=?

    • delete语句,例如Person类的delete语句如下:

    delete from person where id=?

    • 根据OID来检索持久化类实例的select语句,例如Person类的select语句如下:

    Select id,name,age,address from person where id=?

    以上SQL语句中的问号代表JDBC PreparedStatement中的参数,这些SQL语句都存放在SessionFactory的缓存中,当执行Session的save()、update()、delete()和load()方法时,将从缓存中找到相应的预定义SQL语句,再把具体的参数值绑定到该SQL语句中

    在默认情况下,预定义的SQL语句中包含了表的所有字段,此外,Hibernate还允许在映射文件中控制insert和update语句的内存,例如:

    <property name=”addrsss” update=”false” column=”address”/>

    以上代码把<property>元素的update属性设置为false,这表明在update语句中不会包含address字段。

    映射属性

    作用

    <property>元素的insert属性

    如果为false,在insert语句中不包含该字段,表明该字段永远不能被插入。默认值为true

    <property>元素的update属性

    如果为false,update语句中不包含该字段,表明该字段永远不能被更新,默认值为true

    <class>元素的mutable属性

    如果为false,等价于所有的<property>元素的update属性为false,表示整个实例不能被更新,默认值为true

    <property>元素的dynamic-insert属性

    如果为true,表示当保存一个对象时,会动态生成insert语句,只有这个字段取值不能为null,才会把它包含到insert语句中。默认值为false

    <property>元素的dynamic-update属性

    如果为true,表示当更新一个对象时,会动态生成update语句,只有该字段取值不为null,才会把它包含到update语句中。默认值为false

    <class>元素的dynamic-insert属性

    如果为true,等价于所有的<property>元素的dynamic-insert属性为true,表示当保存一个对象时,会动态生成insert语句,insert语句中仅包含所有取值不为null的字段。默认值为false

    <class>元素的dynamic-update属性

    如果为true,等价于所有的<property>元素的dynamic-update属性为true,表示当保存一个对象时,会动态生成update语句,update语句中仅包含所有取值不为null的字段。默认值为false

     

  • 相关阅读:
    【以太坊剖析】以太坊虚拟机(EVM)之基本定义
    python时间的处理
    filebeat如何在alpine镜像中运行
    apisix插件开发(lua版)
    docker容器命令安装
    安装 Ceph 对象网关
    ceph常用操作指令
    boto3使用示例
    基于lvs的ftp集群
    python rpc
  • 原文地址:https://www.cnblogs.com/cnjava/p/2602294.html
Copyright © 2020-2023  润新知