2012-03-21 48 views
2

我正在編寫一個搜索界面,用戶可以從幾個不同實體的字段中進行選擇。這是一個使用Hibernate的Spring MVC(3.0.5)應用程序3如何判斷一個Criteria實例是否已經有一個Subcriteria?

我的DAO類必須能夠靈活地響應這些請求。我想用的方法是這樣的:

critAliases = new ArrayList<String>(); 
... 

Session session = (Session) getEntityManager().getDelegate(); 
crit = session.createCriteria(RootEntity.class); 

// selected search options from user 
for (SearchOption opt: searchOptionList) { 
    if (! critAliases.contains(opt.getAlias())) { 
     crit.addAlias(opt.getEntityName(), opt.getAlias(), opt.getJoinType()); 
     critAliases.add(opt.getAlias()); 
    } 
} 

注意,我要跟蹤的別名,在我的DAO類變量

List<String> critAliases 

一個實例。

如果它已經包含一個與我的opt.getAlias()字符串匹配的Subcriteria,我寧願問Criteria實例。 Criteria接口公開了一個getAlias()方法,它將爲根實體執行操作,但沒有方法檢查或列出Criteria的別名。

有沒有人有更好的解決方案?

回答

1

我認爲你現在的解決方案是最好的。 雖然CriteriaImpl有一個迭代創建的Subcriteria的方法(createAlias將創建一個Subcriteria),但這個方法不是由接口(Criteria)提供的,所以使用它不會很好。即使它是我仍然會選擇你的解決方案(儘管我會建議使用Set而不是List來做這個場景)。

相關問題