java - hibernate : SetMaxResults not working with java. util.Map

标签 java hibernate hashmap

我正在使用 Hibernate 3.0。以下是为获取数据而编写的标准。

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) 不起作用。对于定义的 10 个限制,它仅给出 1 个结果。对于 20,它给出 2,同样。如果我评论第四行,结果将以正确的方式出现。我没有得到这种奇怪的行为。是获取 MAP 的问题吗?如果有人知道这件事请告诉我。

BeanStrucutre:

文档.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() 限制从执行的 SQL 查询的 JDBC 结果集中返回的行数。它不限制从 Criteria 查询返回的对象数量。

对于没有任何连接获取的简单请求,这两个数字是相同的。但对于在 toMany 关联上进行联接获取的查询,数字则不然。例如,如果文档有 2 个计划,并且每个计划有 3 个 Activity ,则您的查询将为该单个文档返回 6 条 JDBC 行。因此,如果您调用 setMaxResults(4),您将只能从查询中获得一个不完整的文档。

setMaxResults() 不应与此类查询一起使用。解决方法包括执行仅返回文档 ID 的查询,并在此查询上应用 setMaxResults()。获得 10 个 ID 后,您可以使用 fetch 连接执行第二个查询,返回具有这 10 个 ID 之一的文档(where document.id in (:documentIds))。

关于java - hibernate : SetMaxResults not working with java. util.Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11202114/

相关文章:

java android 新字符串

java - Java 7 中的 JEditorPane 换行

java - 为什么在这种情况下 String.contains() 不返回 true ?

java - 打印 java map Map<String, Object> - 怎么样?

java - HashMap 中的平均跳数

java - 如何在不影响原始对象值的情况下创建 HashMap 对象的副本

java - Oracle Blobs - 存储大小还是计算?

java - 与 Collection<Integer> 的一对多

java - 使用 "pure"Hibernate/JPA 一次更新唯一列中的多个条目

java - 如何更新 Spring WebFlow 模型中的数据并将其传递回同一 View