在Hibernate中獲取有關聯關系的pojo
我是指例如一個User(用戶)擁有一個many
to
one的屬性Unit(單位)
但是有時有些用戶的Unit屬性為空
如果按單位查詢用戶的時候那些單位為null的用戶就會被遺漏
如何調取呢?這本來是很簡單的
但是我想當然的使用了Restriction
eq
但是不行
後來看了手冊才發現應該使用Restrictions
isNul
下面是Test代碼


/** *//**

* 為了獲取一個unit為null的用戶
如果傳入一個null作為Uint實例則返回的結果總是

* 因為執行的SQL為
(select * ) from USER_INF this_ where this_
UNIT_ID=

* 這不是我們所期望的結果

*/

@Test


public void getUsersWhosUnitIsNullByRestrictionsEqNullUnit()

{

DetachedCriteria dc = DetachedCriteria
forClass(User
class);

dc
add(Restrictions
eq(
unit
null));


Criteria cri = dc
getExecutableCriteria(session);

log
debug(
getUsersWhosUnitIsNullByRestrictionsEqNullUnit():
+ cri
list()
size());

}


/** *//**

* 為了獲取一個unit為null的用戶
如果傳入一個id為null的Unit實例則會報錯
無法翻譯為SQL

* 錯誤類型為
org
hibernate
TransientObjectException

* 這也不是我們所期望的結果

*/

@Ignore

@Test(expected=TransientObjectException
class)


public void getUsersWhosUnitIsNullByRestrictionsEqUnitNullId()

{

Unit unit = new Unit();

log
debug(unit
getId());

DetachedCriteria dc = DetachedCriteria
forClass(User
class);

dc
add(Restrictions
eq(
unit
unit));


Criteria cri = dc
getExecutableCriteria(session);

log
debug(
getUsersWhosUnitIsNull():
+ cri
list()
size());

}



/** *//**

* 為了獲取一個unit為null的用戶正確的方法應該是使用Restrictions
isNull方法

* 因為執行的SQL為
(select * ) from USER_INF this_ where this_
UNIT_ID is null

* 這才是我們所希望的結果

*/

@Test


public void getUsersWhosUnitIsNullByRestrictionsIsNull()

{

DetachedCriteria dc = DetachedCriteria
forClass(User
class);

dc
add(Restrictions
isNull(
unit
));


Criteria cri = dc
getExecutableCriteria(session);

log
debug(
getUsersWhosUnitIsNullByRestrictionsIsNull():
+ cri
list()
size());

}
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28764.html