dynamic-insert和dynamic-update属性

摘要:
dynamic-insert作用:设置对象中没有值的字段insert并不会对其进行插入.实体类映射配置如下˂!
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 voidmain(String[] args){
        EmpSerivce empSerivce = newEmpSerivce();
        Emp emp = newEmp();
        emp.setEmpno(7903);
        emp.setEname("张三");
        empSerivce.add(emp);
    }

dynamic-insert和dynamic-update属性第1张

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

dynamic-insert和dynamic-update属性第2张

没设置dynamic-insert属性的

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

dynamic-insert和dynamic-update属性第3张

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

dynamic-insert和dynamic-update属性第4张

dynamic-update

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

不设置dynamic-update

 public voidupdateEmp(){
        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列

dynamic-insert和dynamic-update属性第5张

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

dynamic-insert和dynamic-update属性第6张

sal 列也变成了 9999

设置了dynamic-update

dynamic-insert和dynamic-update属性第7张

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

总结
  • dynam-insert:设置了此属性对中的空值并不会进行insert,数值型除外
  • dynam-update:设置了此属性只对进行了改变的值进行更新

免责声明:文章转载自《dynamic-insert和dynamic-update属性》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用python制作在线视频播放器遇到的一些问题Java源代码怎么生成机器码?下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Gson的入门使用

Java对象和Json之间的互转,一般用的比较多的两个类库是Jackson和Gson,下面记录一下Gson的学习使用。 基础概念:  Serialization:序列化,使Java对象到Json字符串的过程。  Deserialization:反序列化,字符串转换成Java对象   使用Maven管理Gson,pom.xml导入gson的依赖 <...

写个C#命令行参数解析的小工具

最近测试工作做的比较多因此时常要创建一些控制台类型的应用程序。因为程序有不同的参数开关,需要在程序启动的时候通过命令行来给程序传递各种开关和参数。直接操作args有些不方便,所以就写了个解析参数的小工具来处理各种参数。 参数实体: 1 public class CommandLineArgument 2 { 3 List<Comma...

statement 、prepareStatement的用法和解释

转自:http://blog.csdn.net/QH_JAVA/article/details/48245945 一、prepareStatement 的用法和解释 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程 2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Stateme...

delphi TreeView 从数据库添加节点的四种方法

方法一:delphi中递归算法构建treeView 过程:通过读取数据库中table1的数据,来构建一颗树。table1有两个字段:ID,preID,即当前结点标志和父结点标志。所以整个树的表示为父母表示法。本递归算法不难写,但是要注意:程序内部的变量都应使用局部变量!比如当Query是外部变量(函数外定义或者直接通过控件拖拽得来)时就会得到错误的结果。代...

代码题(50)— 字符串的排列

1、字符串排列 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 (1)交换元素位置 classSolution { public: vector<string> Permutation(stringstr)...

后端向前端页面发送变量的方法,可以包含特殊字符(如英文双引号)

处理此问题,方法有2种,下面的第二种是最先发现的,后来发现第一种更简单,都做一下记录,以备不时之需。 第一种: 对于没有特殊字符的后台string变量,输入前台时,直接在后台定义一个protected或public变量,赋值完成后,在前台直接用var value='<%= xxx %>';获取即可。xxx是后台变量名称。 对于有特殊字符的后台s...