我正在使用Hibernate 3.0。以下是爲獲取數據而編寫的標準。休眠:SetMaxResults不能使用java.util.Map
1. Criteria criteria = session.createCriteria(Document.class);
2. criteria.setMaxResults(10);
3. criteria.setFetchMode("metadata",FetchMode.join);
4. criteria.setFetchMode("activitySchedules", FetchMode.JOIN);
5. criteria.setFetchMode("activitySchedules.activities",FetchMode.JOIN);
6. criteria.setResultTransformer(criteria.DISTINCT_ROOT_PROPERTY);
7. criteria.list();
在此標準,setMaxResults(10)不工作。它只給出1個結果來定義10個限制。如果我評論第四行,結果會以正確的方式進行。我沒有得到這種奇怪的行爲。這是提取MAP的問題嗎?如果有人知道這個讓我知道。
BeanStrucutre:
Document.java
private NormMaster metadata;
private Map<TransactionFlowEnum, ActivitySchedule> activitySchedules;
public NormMaster getMetadata(){
return metadata;
}
public void setMetadata(NormMaster metadata){
this.metadata = metadata;
}
public Map<TransactionFlowEnum, ActivitySchedule> getActivitySchedules() {
return activitySchedules;
}
public void setActivitySchedules(
Map<TransactionFlowEnum, ActivitySchedule> activitySchedules) {
this.activitySchedules = activitySchedules;
}
ActivitySchedule.java
private List<Stage> activities;
public List<Stage> getActivities() {
return activities;
}
public void setActivities(List<Stage> activities) {
this.activities = activities;
}
NormMaster.java
private String name;
public void setName(String name){
this.name = name;
}
public return getName(){
return name;
}
編輯:如果我把一個多個領域Document.java和獲取元數據除外然後activitySchedules正確的數據來了。
只是猜測,'setMaxResults'正在處理標準,並且您也應用了'DISTINCT_ROOT_PROPERTY'。它實際上是產生10行,但作爲獨特只有一行得到返回相同的重複時,'setMaxResults(20)'這次發現20行,但只有兩個不同。當你評論連接操作時,它獲取10個不同的行並返回它們,我認爲'FetchMode.JOIN'正在應用'inner join'嘗試在這裏執行一個左連接,希望你能得到預期的結果。 – manurajhada
@ manurajhada,setMaxResults和Distrinct_Root_Property之間沒有關係。 Distinct_Root通常在應用FETCH_MODE連接時應用。如果一次有多個連接,hibernate會爲此返回多個對象,並且當您應用Distinct_root時,它只會一次提供1個連接。請注意,但這不是我的問題的解決方案。 – PVR
正如JB所說,它適用於不在對象上的sql行數返回,這意味着您的連接正在返回數量的sql行,但每個條件只返回一個對象。 – manurajhada