熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

hibernate中獲取關聯屬性為null的方式

2013-11-23 20:37:19  來源: Java開源技術 
    在Hibernate中獲取有關聯關系的pojo我是指例如一個User(用戶)擁有一個manytoone的屬性Unit(單位)但是有時有些用戶的Unit屬性為空如果按單位查詢用戶的時候那些單位為null的用戶就會被遺漏如何調取呢?這本來是很簡單的但是我想當然的使用了Restrictioneq但是不行後來看了手冊才發現應該使用RestrictionsisNul下面是Test代碼


    /** *//**
     * 為了獲取一個unit為null的用戶如果傳入一個null作為Uint實例則返回的結果總是
     * 因為執行的SQL為(select * ) from USER_INF this_ where this_UNIT_ID=
     * 這不是我們所期望的結果
     */
    @Test
    public void getUsersWhosUnitIsNullByRestrictionsEqNullUnit() {
        DetachedCriteria dc = DetachedCriteriaforClass(Userclass);
        dcadd(Restrictionseq(unit null));

        Criteria cri = dcgetExecutableCriteria(session);
        logdebug(getUsersWhosUnitIsNullByRestrictionsEqNullUnit(): + crilist()size());
    }
    
    /** *//**
     * 為了獲取一個unit為null的用戶如果傳入一個id為null的Unit實例則會報錯無法翻譯為SQL
     * 錯誤類型為orghibernateTransientObjectException
     * 這也不是我們所期望的結果
     */
    @Ignore
    @Test(expected=TransientObjectExceptionclass)
    public void getUsersWhosUnitIsNullByRestrictionsEqUnitNullId() {
        Unit unit = new Unit();
        logdebug(unitgetId());
        DetachedCriteria dc = DetachedCriteriaforClass(Userclass);
        dcadd(Restrictionseq(unit unit));

        Criteria cri = dcgetExecutableCriteria(session);
        logdebug(getUsersWhosUnitIsNull(): + crilist()size());
    }

    /** *//**
     * 為了獲取一個unit為null的用戶正確的方法應該是使用RestrictionsisNull方法
     * 因為執行的SQL為(select * ) from USER_INF this_ where this_UNIT_ID is null
     * 這才是我們所希望的結果
     */
    @Test
    public void getUsersWhosUnitIsNullByRestrictionsIsNull() {
        DetachedCriteria dc = DetachedCriteriaforClass(Userclass);
        dcadd(RestrictionsisNull(unit));

        Criteria cri = dcgetExecutableCriteria(session);
        logdebug(getUsersWhosUnitIsNullByRestrictionsIsNull(): + crilist()size());
    }
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28764.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.