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:設置了此屬性只對進行了改變的值進行更新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM