2009-02-13 72 views

回答

4

我已经找到了hacky thing to overcome这个问题。

唯一的“解决办法”这是 我已经能够拿出是 问题从标准 相同的标准对象两个查询。第一个 得到id的第二个是 约束到id。

//根据需要设置crtieria, 包括分页myCriteria = doStuffToSetupCriteria(); myCriteria.setFirstResult((page-1)* itemsPerPage); myCriteria.setMaxResults(itemsPerPage);

//获取列表中,如果主键 myCriteria.setProjection(Projections.distinct(Projections.property( “myAllias.id”)); 列表ID = gacc.list();

//现在添加ID的进入 限制 myCriteria.add(Restrictions.in(“myAlias.id, IDS));

//从最后一个条件而定运行 gacc.setProjection(空)清理; 海关总署。 setFirstResult(0); gacc.setMaxResults(Integer.MAX_VALUE);

//结果列表对象= gacc.list()

小哈克我同意,但唯一 接受soltion我能找到给 这个limitiation。

+1

使用ResultTransformer搜索结果进行过滤,但Projections.Distinct应当就查询了“独特”的关键字。这不正常吗? – 2009-02-13 15:37:02

+0

“在客户端”是否意味着,它从数据库获取所有内容并将其过滤到内存中而不是在SQL Server上? – 2009-02-13 17:13:05

1

我建立了一个类似的解决方案,但在短短的一次旅行DB:

的DetachedCriteria的子查询= ... // - >添加你想要的所有规范和包容性的 “SetFirstResult” 和 “SetMaxResults”

DetachedCriteria rootQuery = DetachedCriteria.For(); //其中T是一个实体

subQuery.SetProjection( Projections.Distinct( Projections.ProjectionList()。添加(Projections.Alias(Projections.Property( “ID”), “ID”)) ) );

//注意:我的所有实体都继承自包含属性“ID”的基类 rootQuery.Add(Subqueries。PropertyIn(“ID”,subQuery));

// ...然后使用rootQuery获取T的List,并且不会重复检索项目。

我希望有人发现这个实现有帮助:)

罗曼客户

相关问题