2013-02-25 44 views
4

我有點困惑別名是誠實的,所以我希望有人能幫助我更好地理解他們。爲了解釋我缺少的東西,我將使用示例。休眠使用別名與標準

比方說,我有:

Criteria criteria = session.createCriteria(Car.class) 
criteria.createAlias("doors", "doors"); 

這意味着,現在我可以用一些Restrcitions找到一個門是在Car的左側或類似的規定。

現在我的問題是,如果我在哪裏可以添加多個別名:

criteria.createAlias("doors", "doors").createAlias("doors.keytype", "keytype"); 

criteria.createAlias("tier".tier); 

這是什麼意思?我的criteria對象具有所有這些別名?在這種情況下getAlias()方法會返回什麼?

從API:

獲取此標準實例封裝的實體的別名。

我的印象是所有的別名都被這個實例封裝了嗎?我錯了嗎?我不知何故失去了我的第一個別名?

另外,如果我這樣做:

Criteria criteri2 = criteria.createAlias("tier".tier); 

這是否意味着雙方criteriacriteria2點是相同的Criteria或區分,哪一個點,什麼別名?

此外,鑑於每個createAlias返回Criteria我應該分配給原來的criteria或新的?

我希望你能看到我的困惑。

回答

2

這是什麼意思?我的標準對象具有所有這些別名?

在這種情況下,會出現什麼getAlias()方法的返回?

getAlias回報在createCriteria(Car.class)使用的類的別名 - 你還沒有使用一個,但你可以指定:createCriteria(Car.class, "c"),其中criteria.getAlias()將返回c

這是否意味着標準和標準2點是相同的標準或差異以及哪一個指向什麼別名?

Criteria API中的大多數方法返回自己的標準以支持鏈接,以供使用的設施。由於對象(及其內部屬性)在內部被更改,因此不需要保存返回的標準實例。

criteria.createAlias("a.b", "a_b").add(Restrictions.eq("a_b", value)); 

類似於

criteria.createAlias("a.b", "a_b"); 
criteria.add(Restrictions.eq("a_b", value)); 

所以......

而且因爲每個createAlias返回一個標準,我應該賦值給原來的標準或新的?

...不,它不會是可行的,在休眠的傢伙限制標準規範強制性要求程序員保存返回的實例,它會還挺違背OO標準承擔標準對象沒有改變。