• dynamic-insert和dynamic-update属性


    dynamic-insert

     作用:设置对象中没有值的字段 insert并不会对其进行插入.

    实体类映射配置如下

    <!DOCTYPE hibernate-mapping PUBLIC
            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <!-- name实体类路径 table数据库表名 schema表的拥有者-->
        <class name="entity.Emp" table="emp" schema="scott">
            <!-- 此id属性表示 持久化的OID和表的主键映射
                name为实体类中的属性名称 type为数据类型 column为数据库中的列名 -->
            <id name="empno" type="java.lang.Integer" column="empno">
                <!-- 此属性用于指定具体注解生成策略 assigned策略,就是不使用主键生成策略,由手工输入ID. -->
                <generator class="assigned"/>
            </id>
            <!-- name为实体类中的属性名称 type为数据类型 column为数据库中的列名 not-null="true"表示不允许为空 -->
            <property name="ename" type="string"  not-null="true" column="ename"/>
            <property name="deptNo" type="java.lang.Integer" column="deptNo"/>
            <property name="job" type="string" column="job"/>
            <property name="MGR" type="java.lang.Double" column="MGR"/>
            <property name="hiretDate" type="java.sql.Date" column="hireDate"/>
            <property name="sal" type="java.lang.Double" column="sal"/>
            <property name="comm" type="java.lang.Double" column="comm"/>
        </class>
    </hibernate-mapping>

    首先是设置了dynamic-insert属性的

    public static void main(String[] args){
            EmpSerivce empSerivce = new EmpSerivce();
            Emp emp = new Emp();
            emp.setEmpno(7903);
            emp.setEname("张三");
            empSerivce.add(emp);
        }

    结果如上,可以看到string类型未赋值的属性都没有对其进行插入,数值类型因为默认值是0所以会进行插入,deptNo因为是外键所以没有进行插入

    没设置dynamic-insert属性的

     

    public static void main(String[] args){
            EmpSerivce empSerivce = new EmpSerivce();
            Emp emp = new Emp();
            emp.setEmpno(7905);
            emp.setEname("张三");
            empSerivce.add(emp);
        }

     

    结果如上 全部字段都进行了插入

    dynamic-update

     作用:设置对象空字段不对其进行更新

    不设置dynamic-update

     public void updateEmp(){
            Transaction tx = null;
            try {
                tx= HibernateUtil.currentSession().beginTransaction();
                Emp empUpdate = empDao.update(7900);
                empUpdate.setSal(9999);
                tx.commit();
            } catch (HibernateException e) {
                e.printStackTrace();
                if(tx!=null)
                    tx.rollback();  //回滚事务
            }
        }

    可以看到在代码中我只更新了sal列

    可以看到,对全部的列进行了更新

    sal 列也变成了 9999

    设置了dynamic-update

    设置了之后只对我们更新过的列进行更新

    总结

    • dynam-insert:设置了此属性对中的空值并不会进行insert,数值型除外
    • dynam-update:设置了此属性只对进行了改变的值进行更新
  • 相关阅读:
    Ubuntu 中软件的安装、卸载以及查看的方法总结
    无锁队列的环形数组实现
    Geodatabase模型
    地图投影与ArcGIS坐标系转换
    ARCGIS动态画点
    ArcEngine数据删除几种方法和性能比较
    AE开发技术文档--8种数据访问方法
    Hibernate 的HQL和sql有什么区别
    ActionContextCleanUp作用
    Hibernate延迟加载与opensessioninviewFilter
  • 原文地址:https://www.cnblogs.com/hfx123/p/9981804.html
Copyright © 2020-2023  润新知