在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