亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標題:
用criteria進行關(guān)聯(lián)查詢--hibernate 的ResultTransformer
[打印本頁]
作者:
wangyan_230
時間:
2009-05-27 15:29
標題:
用criteria進行關(guān)聯(lián)查詢--hibernate 的ResultTransformer
引用
兩個實體 Parent(P) 和 Child(C)之間是1:N的關(guān)系,現(xiàn)要求符合指定條件的P及所包 含的C
采用hibernate中的Criteria來實現(xiàn)此功能的代碼如下:
Java代碼
[/url]
Criteria criteria =
this
.getCriteria(Parent.
class
);
//連接關(guān)聯(lián)子對象child,且指定了連接方式為左外連接
criteria.createAlias(
"children"
,
"c"
, CriteriaSpecification.LEFT_JOIN));
//下面三行代碼是用于獲取總的記錄數(shù)
criteria.setProjection(Projections.rowCount());
int
size = (Integer) criteria.uniqueResult();
criteria.setProjection(
null
);
List results = criteria.list(); Criteria criteria = this.getCriteria(Parent.class);
//連接關(guān)聯(lián)子對象child,且指定了連接方式為左外連接
criteria.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN));
//下面三行代碼是用于獲取總的記錄數(shù)
criteria.setProjection(Projections.rowCount());
int size = (Integer) criteria.uniqueResult();
criteria.setProjection(null);
List results = criteria.list();
上面的results返回的是一個對象數(shù)組的list,數(shù)組的長度為2,依次是一個Child對象和一個Parent對象,這種返回結(jié)果的方式是所需要的;但是,倘若將中間三條獲取總記錄數(shù)的代碼去掉,則返回是Parent對象的list,且其相關(guān)的Child子對象也沒有加載進來。造成這種差別的便是 ResultTransformer
API中對 ResultTransformer 的說明如下:
引用
Implementors define a strategy for transforming criteria query results into the actual application-visible query result list.
從上可知,criteria會使用此接口的某一實現(xiàn)來將查詢結(jié)果轉(zhuǎn)化為返回的list中實際存儲的結(jié)果。criteria中的方法 setResultTrans 可用于設(shè)置所使用的轉(zhuǎn)化策略。其可設(shè)置的值如下:
CriteriaSpecification.ROOT_ENTITY:就是一個RootEntityResultTransformer 對象,其實現(xiàn)如下:
Java代碼
[url=http://lionheart.javaeye.com/blog/170148#]
public
Object transformTuple(Object[] tuple, String[] aliases) {
return
tuple[ tuple.length-
1
];
} public Object transformTuple(Object[] tuple, String[] aliases) {
return tuple[ tuple.length-1 ];
}
由代碼可知,它返回值取的是數(shù)組中的最后一個對象,也即根實體對象,在上例中就相當于返回Parent對象。
CriteriaSpecification.DISTINCT_ROOT_ENTITY:就是一個 DistinctRootEntityResultTransformer 對象,它的實現(xiàn)與RootEntityResultTransformer相似,只是在其的基礎(chǔ)對根實體對象進行了比較,過濾掉了其中相同的對象。
CriteriaSpecification.ALIAS_TO_ENTITY_MAP:就是一個AliasToEntityMapResultTransformer 對象,其實現(xiàn)如下:
Java代碼
[/url]
public
Object transformTuple(Object[] tuple, String[] aliases) {
Map result =
new
HashMap(tuple.length);
for
(
int
i=
0
; i
String alias = aliases
;
if
( alias!=
null
) {
result.put( alias, tuple
);
}
}
return
result;
} public Object transformTuple(Object[] tuple, String[] aliases) {
Map result = new HashMap(tuple.length);
for ( int i=0; i
它是對數(shù)組中的每一個對象,以其別名為key,對象本身為value,構(gòu)成了一個map作為返回值。
CriteriaSpecification.PROJECTION:就是一個 PassThroughResultTransformer 對象,它就是簡單地返回數(shù)組本身,即上例中第一種情況。
Criteria中默認使用的 ResultTransformer 實現(xiàn)策略是 ROOT_ENTITY;但是當調(diào)用了方法 setProjection后,會隱式地將策略設(shè)置為 PROJECTION。所以,才會出現(xiàn)上例中的兩種不同結(jié)果。如果希望返回的結(jié)果是數(shù)組形式的,則可以多加上如下這條語句:
Java代碼
[url=http://lionheart.javaeye.com/blog/170148#]
criteria.setProjection(
null
);
本文來自ChinaUnix博客,如果查看原文請點:
http://blog.chinaunix.net/u1/57965/showart_1946316.html
作者:
ccd135
時間:
2012-08-26 17:29
它返回值取的是數(shù)組中的最后一個對象,也即根實體對象
歡迎光臨 Chinaunix (http://72891.cn/)
Powered by Discuz! X3.2