国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate鎖機制

2019-11-15 01:06:56
字體:
來源:轉載
供稿:網友
Hibernate鎖機制

Hibernate提供了兩種鎖機制:悲觀鎖和樂觀鎖。

悲觀鎖和樂觀鎖的區別:

樂觀鎖悲觀鎖

不管有多少線程同時訪問同一條數據;給數據加上一個版本號;每次提交數據的時候對比 如果提交的數據版本高于數據庫版本;那么進行更新(版本號—+1);如果提交的數據版 本低于 數據庫版本則提交失敗(取決于誰先提交數據)

當有一個線程在訪問數據庫中的某一條記錄的時候;悲觀的認為其他的線程有可能也要訪問;這時就悲觀的把這條記錄鎖定(基于數據庫鎖機制完成);得到事務提交之后自動釋放 缺點:當數據長時間不提交的時候;其他的線程無法進行對數據操作;這樣對數據庫的 連接成本 開銷非常高(不適用)

以樂觀鎖為例:

用部門表為例:

package com.msit.hibernate.entity;import java.util.Set;/** * 部門 * @author Administrator * 在部門的角度關系:一對多(一個部門多個員工)one-to-many */public class Department {        PRivate int id;    private String name;    private int ver;    private Set<Employee> emps;//員工集合        /**     * @return the ver     */    public int getVer() {        return ver;    }    /**     * @param ver the ver to set     */    public void setVer(int ver) {        this.ver = ver;    }    /**     * @return the emps     */    public Set<Employee> getEmps() {        return emps;    }    /**     * @param emps the emps to set     */    public void setEmps(Set<Employee> emps) {        this.emps = emps;    }    /**     * @return the id     */    public int getId() {        return id;    }    /**     * @param id the id to set     */    public void setId(int id) {        this.id = id;    }    /**     * @return the name     */    public String getName() {        return name;    }    /**     * @param name the name to set     */    public void setName(String name) {        this.name = name;    }        }

Department.hbm映射

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping    package="com.msit.hibernate.entity">    <!-- 對象 關系 映射 -->    <class name="Department" table="t_department">        <id name="id">            <generator class="increment"/>        </id>                  <!--必須在id節點下-->        <version name="ver"/>                <property name="name" />                <!--             lazy:是否采用延遲加載策略;默認值為true             fetch:采用什么抓取策略;默認為逐條抓取select         -->        <set name="emps" cascade="all" >            <key column="depart_id"></key><!-- 對應員工表中的外鍵 -->            <one-to-many class="Employee" />        </set>            </class></hibernate-mapping>

測試類:

package com.msit.hibernate.lock;import org.hibernate.HibernateException;import org.hibernate.session;import org.hibernate.Transaction;import com.msit.hibernate.entity.Department;import com.msit.hibernate.tool.HibernateUtil;public class Lock {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        lock();        //add();    }        static void lock(){                Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        Department dpt = (Department) session.get(Department.class, 2);        dpt.setName("人事部");        System.out.println("數據版本1:"+dpt.getVer());                Session session2 = HibernateUtil.getSession();        Transaction tx2 = session2.beginTransaction();        Department dpt2 = (Department) session2.get(Department.class, 2);        dpt2.setName("人事");        System.out.println("數據版本2:"+dpt2.getVer());                tx2.commit();                Department dpt3 = (Department) HibernateUtil.getSession().get(Department.class, 2);        System.out.println("更新之后數據版本:"+dpt3.getVer());                tx.commit();            }        static void add(){        try {            Session session = HibernateUtil.getSession();            Transaction tx = session.beginTransaction();            Department dpt = new Department();            dpt.setName("人事部");            session.save(dpt);            tx.commit();                                } catch (HibernateException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                    }}

您可以通過點擊 右下角 的按鈕 來對文章內容作出評價, 也可以通過左下方的 關注按鈕 來關注我的博客的最新動態。 如果文章內容對您有幫助, 不要忘記點擊右下角的 推薦按鈕 來支持一下哦   如果您對文章內容有任何疑問, 可以通過評論或發郵件的方式聯系我: 2276292708@QQ.com如果需要轉載,請注明出處,謝謝!!

  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 思茅市| 颍上县| 凤冈县| 寿光市| 耒阳市| 延吉市| 疏附县| 高台县| 石楼县| 读书| 贡山| 银川市| 甘孜县| 夏邑县| 舒城县| 利辛县| 宁强县| 莱西市| 岳普湖县| 莒南县| 桃园市| 泰和县| 望城县| 高陵县| 高清| 龙口市| 修水县| 昭通市| 长白| 竹溪县| 绥宁县| 保山市| 万盛区| 长宁县| 肇州县| 承德市| 博爱县| 阜康市| 云龙县| 丰台区| 安阳县|