亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hibernatehistorytest.java

?? 用struts2+jpa來實現了對音樂
?? JAVA
字號:
package net.jeffrey.hibernate.history;import java.util.List;import javax.persistence.EntityManager;import javax.persistence.Persistence;import net.jeffrey.hibernate.Category;import net.jeffrey.hibernate.Product;import org.junit.After;import org.junit.Before;import org.junit.Test;import static org.junit.Assert.*;import static net.jeffrey.hibernate.history.OperationType.*;/** * Hibernate 審計日志測試用例 * @author jeffrey */public class HibernateHistoryTest {    private EntityManager em;    public HibernateHistoryTest() {    }    @Before    public void setUp() {        em = Persistence.createEntityManagerFactory("HibernateAuditHistoryPU").createEntityManager();    }    @After    public void tearDown() {        em.close();    }    @Test    // 測試審計日志:創建對象    public void testCreateHistory() {        Product p = new Product();        p.setName("Hibernate in Action");        // 保存新商品        em.getTransaction().begin();        em.persist(p);        em.getTransaction().commit();                // 查找該對象關聯的操作日志        List<HistoryEntry> list = em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", p.getId()).getResultList();        assertEquals(1, list.size());        HistoryEntry h = list.get(0);        // 日志關聯的實體類型與商品類應該相同        assertEquals(Product.class.getName(), h.getEntity().getName());        // 測試日志關聯的實體id是否正確        assertEquals(p.getId(), h.getEntityId());        // 該日志的操作類型應該是CREATE類型        assertEquals(CREATE, h.getOperationType());        // 測試是否正確生成了日期戳        assertNotNull(h.getTimestamp());    }    @Test    // 測試審計日志:簡單屬性的更新    public void testUpdatePropertyHistory() {        Product p = em.find(Product.class, 1);        assertNotNull(p);        assertEquals("Core Java", p.getName());        p.setName("Core Java I");        em.getTransaction().begin();        em.merge(p);        em.getTransaction().commit();        HistoryEntry h = (HistoryEntry) em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", p.getId()).getSingleResult();        assertEquals(Product.class.getName(), h.getEntity().getName());        assertEquals(p.getId(), h.getEntityId());        assertEquals(UPDATE, h.getOperationType());        // 更新的屬性是name        assertEquals("name", h.getProperty());        // 更新前的值        assertEquals("Core Java", h.getPreviousValue());        // 更新后的值        assertEquals("Core Java I", h.getNewValue());        assertNotNull(h.getTimestamp());    }        @Test    // 測試審計日志:更新值與舊值相同    public void testUpdatePropertyBySameValue() {        Product p = em.find(Product.class, 2);        assertNotNull(p);        assertEquals("JSF in Action", p.getName());        em.getTransaction().begin();        // 更新的值與原有值一樣        p.setName("JSF in Action");        em.merge(p);        em.getTransaction().commit();                List list = em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", p.getId()).getResultList();        // 并沒有實際更新值,不應該生成審計日志        assertTrue(list.isEmpty());    }        @Test    // 測試審計日志:多對一的關聯對象的更新    public void testUpdateManyToOneMappingHistory() {        Product p = em.find(Product.class, 3);        assertEquals("iPhone", p.getName());        Category c1 = p.getCategory();        assertEquals("Mobile phone", c1.getName());        Category c2 = em.find(Category.class, 5);        assertEquals("Toy", c2.getName());        em.getTransaction().begin();        // 變更該商品的類別,商品和類別是many to one        p.setCategory(c2);        em.merge(p);        em.getTransaction().commit();                HistoryEntry h = (HistoryEntry)em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", p.getId()).getSingleResult();        assertEquals(Product.class.getName(), h.getEntity().getName());        assertEquals(UPDATE, h.getOperationType());        // 更新的屬性是category        assertEquals("category", h.getProperty());        // 原有值應該是該商品原有類別的id        assertEquals(c1.getId().toString(), h.getPreviousValue());        // 新值應該是新類別的id        assertEquals(c2.getId().toString(), h.getNewValue());    }        @Test    // 測試審計日志:一對多的關聯對象的更新    public void testUpdateOneToManyMappingHistory() {        Category c = em.find(Category.class, 6);        assertEquals("Car", c.getName());        assertEquals(2, c.getProducts().size());        Product p = c.getProducts().get(1);        assertEquals("SU-27", p.getName());                em.getTransaction().begin();        // 從一個類別Car中去除一個商品SU-27,類別和商品是 one to many        c.removeProduct(p);        em.merge(c);        em.getTransaction().commit();                List list = em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Category.class)                .setParameter("entityId", c.getId()).getResultList();        // 在category和product的一對多關聯中,product是主控端,hibernate只會觸發與product關聯的更新事件        // 所以category沒有關聯該次更新操作的審計日志        assertTrue(list.isEmpty());        HistoryEntry h = (HistoryEntry) em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", p.getId()).getSingleResult();        assertNotNull(h);        // 但是,類別Car刪除商品SU-27,商品SU-27與類別Car解除了關聯關系。則會生成相應的更新審計日志        assertEquals(Product.class.getName(), h.getEntity().getName());        assertEquals(p.getId(), h.getEntityId());        assertEquals("category", h.getProperty());        assertEquals(UPDATE, h.getOperationType());        assertEquals(c.getId().toString(), h.getPreviousValue());        assertNull(h.getNewValue());    }    @Test    // 測試審計日志:刪除對象    public void testDeleteHistory() {        Product p = em.find(Product.class, 2);        assertNotNull(p);        assertEquals("JSF in Action", p.getName());        em.getTransaction().begin();        em.remove(p);        em.getTransaction().commit();        assertNull(em.find(Product.class, 2));        HistoryEntry h = (HistoryEntry) em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", p.getId()).getSingleResult();        // 實體對象已經刪除,但是通過其id仍然可以訪問到操作歷史的記錄        assertEquals(Product.class.getName(), h.getEntity().getName());        assertEquals(DELETE, h.getOperationType());        assertNotNull(h.getTimestamp());    }        @Test    // 測試審計日志:級聯刪除對象    public void testCascadeDeleteHistory() {        Category c = em.find(Category.class, 2);        assertEquals("Movie", c.getName());        em.getTransaction().begin();        em.remove(c);        em.getTransaction().commit();                // category 和 product是級聯一對多的關系,如果刪除了category,會生成相應的所有關聯對象的刪除操作日志        HistoryEntry h1 = (HistoryEntry) em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", 6).getSingleResult();        assertNotNull(h1);        assertEquals(DELETE, h1.getOperationType());        HistoryEntry h2 = (HistoryEntry) em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Product.class)                .setParameter("entityId", 7).getSingleResult();        assertNotNull(h2);        assertEquals(DELETE, h2.getOperationType());        HistoryEntry h3 = (HistoryEntry) em.createNamedQuery("HistoryEntry.findByEntity")                .setParameter("entity", Category.class)                .setParameter("entityId", 2).getSingleResult();        assertEquals(DELETE, h3.getOperationType());    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内精品免费**视频| 欧美一区二区三区系列电影| 欧美日韩国产成人在线91 | 蜜臀av性久久久久蜜臀aⅴ| 韩国av一区二区三区四区| 91官网在线免费观看| 久久久精品国产免大香伊| 日本午夜一区二区| 91精彩视频在线观看| 日本一区二区久久| 精东粉嫩av免费一区二区三区| 日本精品视频一区二区| 中文子幕无线码一区tr| 国产在线国偷精品免费看| 欧美日韩国产经典色站一区二区三区| 中文字幕一区二区视频| 国产成人精品免费网站| 精品国产免费人成电影在线观看四季 | 日本一区二区三区视频视频| 麻豆极品一区二区三区| 欧美日韩国产综合草草| 亚洲精选视频免费看| 成人国产免费视频| 国产午夜久久久久| 国产在线视频精品一区| 精品日韩在线观看| 六月丁香婷婷色狠狠久久| 欧美一区二区三区色| 日精品一区二区| 69堂国产成人免费视频| 人人爽香蕉精品| 欧美v亚洲v综合ⅴ国产v| 美女视频黄免费的久久| 日韩精品一区二区三区中文不卡 | 久久一区二区三区四区| 国产在线一区二区| 久久久777精品电影网影网| 国产精品一二三在| 国产精品丝袜91| 99精品桃花视频在线观看| 亚洲欧美视频在线观看视频| 在线观看视频一区二区欧美日韩| 夜夜嗨av一区二区三区| 欧美日韩国产不卡| 精品在线观看免费| 中文字幕 久热精品 视频在线| 波波电影院一区二区三区| 亚洲欧美日本在线| 911精品产国品一二三产区| 久久精品国产在热久久| 精品国产乱码久久久久久老虎 | 爽爽淫人综合网网站| 日韩一区国产二区欧美三区| 久久99精品久久久久久国产越南| 久久久久久久久蜜桃| 91在线精品一区二区| 亚洲成人资源网| 久久蜜桃香蕉精品一区二区三区| 国产91高潮流白浆在线麻豆| 亚洲少妇屁股交4| 欧美日韩亚州综合| 精品一区在线看| 亚洲天堂av老司机| 欧美一区二区三区思思人| 国产精品亚洲专一区二区三区 | 韩国一区二区在线观看| 中文在线资源观看网站视频免费不卡 | 亚洲成人免费在线| 欧美成人一区二区三区| 99精品欧美一区| 美女www一区二区| 综合久久国产九一剧情麻豆| 日韩一区二区麻豆国产| 91啪在线观看| 国产一区二区三区美女| 亚洲国产一区视频| 国产精品免费观看视频| 91精品国产乱码| 色老头久久综合| 国产精一品亚洲二区在线视频| 亚洲一区二区三区三| 久久久综合视频| 69堂亚洲精品首页| 欧美亚洲国产一区在线观看网站| 极品美女销魂一区二区三区免费| 亚洲愉拍自拍另类高清精品| 日本一区二区三区在线观看| 欧美一区二区三区四区五区| 91高清在线观看| 色综合色综合色综合色综合色综合| 久久99日本精品| 日本大胆欧美人术艺术动态| 一区二区三区在线免费观看| 国产三级欧美三级| 久久婷婷成人综合色| 日韩一级成人av| 91麻豆精品国产91久久久久久 | 国产精品第五页| 国产午夜亚洲精品羞羞网站| 日韩美女在线视频| 欧美男男青年gay1069videost| 一本大道久久精品懂色aⅴ| 国产不卡免费视频| 国产美女娇喘av呻吟久久| 日本在线不卡一区| 男人操女人的视频在线观看欧美| 亚洲午夜免费福利视频| 一区二区三区高清不卡| 亚洲人成网站在线| 亚洲欧洲日韩在线| 日韩毛片精品高清免费| 中文字幕色av一区二区三区| 中文字幕av在线一区二区三区| 国产欧美一区二区精品忘忧草 | 精品国产精品一区二区夜夜嗨| 69堂精品视频| 精品嫩草影院久久| 国产视频911| 国产精品你懂的| 自拍视频在线观看一区二区| 亚洲人吸女人奶水| 一区二区三区在线不卡| 亚洲一二三四在线观看| 午夜久久久久久| 久久99这里只有精品| 国产不卡视频在线播放| 97国产一区二区| 欧美日韩在线播放一区| 69堂国产成人免费视频| 精品区一区二区| 中文字幕亚洲视频| 亚洲成人手机在线| 国内外精品视频| 99精品黄色片免费大全| 欧美日韩美少妇| 久久久精品国产免费观看同学| 国产精品欧美一区喷水| 亚洲国产另类av| 国产一区二区三区美女| 91在线视频免费91| 日韩欧美123| 中文字幕在线不卡国产视频| 亚洲精品久久久蜜桃| 男人的j进女人的j一区| 成人动漫视频在线| 欧美日韩一卡二卡三卡 | 懂色av一区二区三区免费看| 色呦呦网站一区| 欧美va天堂va视频va在线| 1024国产精品| 久久不见久久见免费视频7 | 亚洲一区二区三区视频在线播放 | 国产精品久久久久久久久动漫| 洋洋av久久久久久久一区| 麻豆精品在线看| 色婷婷av一区二区三区gif| 久久久午夜电影| 亚洲一二三四区不卡| 国产高清亚洲一区| 欧美高清dvd| 亚洲欧洲一区二区在线播放| 蜜臀久久久99精品久久久久久| 91在线视频播放| 国产亚洲成av人在线观看导航| 亚洲国产你懂的| 91免费小视频| 久久精品夜色噜噜亚洲a∨| 午夜激情一区二区三区| 91毛片在线观看| 久久精品一区二区三区不卡| 日韩精品福利网| 欧美在线一区二区| 亚洲同性gay激情无套| 国产福利精品导航| 精品少妇一区二区三区日产乱码| 亚洲成人av中文| 色婷婷国产精品| 亚洲色大成网站www久久九九| 国产剧情av麻豆香蕉精品| 日韩精品一区二区三区在线| 视频在线观看一区| 欧美午夜影院一区| 亚洲精品免费一二三区| 成人高清av在线| 中文字幕国产一区二区| 国产一区二区三区在线观看免费视频 | 欧美乱妇一区二区三区不卡视频| 亚洲特黄一级片| av成人免费在线| 中文字幕一区二区日韩精品绯色| 国产成人免费在线观看不卡| 欧美成人性战久久| 国精产品一区一区三区mba桃花 | 91片在线免费观看| 亚洲欧美日韩国产中文在线| av在线这里只有精品| 中文字幕在线一区免费| aa级大片欧美| 亚洲欧美另类图片小说| 色88888久久久久久影院按摩|