PVR*_*PVR 2 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();
Run Code Online (Sandbox Code Playgroud)
在此条件中,setMaxResults(10)不起作用.对于定义的10个限制,它只给出1个结果.对于20,它同样给予2.如果我评论第4行,结果将以适当的方式进行.我没有得到这种奇怪的行为.是抓取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;
}
Run Code Online (Sandbox Code Playgroud)
ActivitySchedule.java
private List<Stage> activities;
public List<Stage> getActivities() {
return activities;
}
public void setActivities(List<Stage> activities) {
this.activities = activities;
}
Run Code Online (Sandbox Code Playgroud)
NormMaster.java
private String name;
public void setName(String name){
this.name = name;
}
public return getName(){
return name;
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果我在Document.java中添加一个字段并获取不包括activitySchedules的元数据,那么正确的数据即将到来.
setMaxResults()
限制从执行的SQL查询中返回的JDBC结果集返回的行数.它不限制从Criteria查询返回的对象数.
对于没有任何连接提取的简单请求,这两个数字是相同的.但对于在toMany关联上使用连接提取的查询,数字不是.例如,如果文档有2个计划,并且每个计划都有3个活动,则查询将为此单个文档返回6个JDBC行.因此,如果您打电话setMaxResults(4)
,您将从查询中获取一个不完整的文档.
setMaxResults()
不应该与此类查询一起使用.解决方法包括执行仅返回文档ID的setMaxResults()
查询,并应用于此查询.获得10个ID后,使用fetch join执行第二个查询,返回具有这10个ID之一的文档(where document.id in (:documentIds)
).
归档时间: |
|
查看次数: |
2549 次 |
最近记录: |