相关疑难解决方法(0)

在hibernate中实现结果分页(获取总行数)

如何在Hibernate中实现分页?该Query对象有方法叫setMaxResultssetFirstResult这肯定是有帮助的.但是我在哪里可以得到结果总数,以便我可以显示结果最后一页的链接,并打印结果200到250的xxx

java database paging hibernate

10
推荐指数
2
解决办法
2万
查看次数

通过服务API公开Hibernate标准

这更像是一个设计而不是实现问题,而且它会很长,所以请耐心等待.最好用一个例子来解释:

假设我有一个名为Product的业务实体,其中包含许多属性(名称,价格,供应商等).

它由接口(Product)和实现(ProductImpl,在Hibernate中映射)以及基本CRUD服务接口(ProductService)和实现(ProductServiceImpl)表示.
ProductProductService作为API公开,它们的实现不是.

我想向ProductService添加一个List findProducts(QueryCriteria criteria)方法,该方法将返回满足给定条件的产品列表.要求是:

  1. 通过直接产品属性查询(例如product.price gt 50.0)
  2. 按关联查询(例如product.vendor.name = "Oracle")
  3. 排序结果(例如order by product.vendor.name desc, product.price asc")
  4. 应用其他过滤器.与API客户端指定的上述3个项目不同,服务可以基于客户端的身份应用其他过滤器(例如,调用此方法的客户端可能仅限于查看由给定供应商制造的产品).此类过滤器优先于客户端指定的任何条件(例如,如果过滤器设置为product.vendor.name = "Microsoft",则上面的(2)中的查询应生成空结果集.

因此,问题是这种方法使用的QueryCriteria接口应该是什么样的?我可以想到3个解决方案,我不喜欢其中任何一个:

  • 允许客户端直接指定HQL(以"where"子句开头).这是最直接的解决方案,但也是最有问题的安全方面.即使假设过滤器(上面的#4)足够简单,可以通过Hibernate的会话过滤器实现,HQL仍然需要解析 - 至少 - 确保将查询参数指定为参数而不是内联.
  • 使用精简包装的Hibernate的DetachedCriteria代替QueryCriteria."精简包装"因为不能允许客户端直接创建DetachedCriteria,因为无法控制为其创建的映射实体.此外,这不像HQL那样灵活,因为某些查询不容易(或根本没有)通过Criteria API表达.与HQL方法一样,过滤器(上面的#4)将仅限于Hibernate会话过滤器.
  • 编写我自己的QueryCriteria接口/实现,它将在幕后形成DetachedCriteria或HQL.虽然可能是最灵活的解决方案,但这必须复制来自Criteria API的大量代码,这似乎不太理想.

任何关于上述方法的有效性的评论或 - 手指交叉 …

java hibernate

9
推荐指数
1
解决办法
2698
查看次数

标签 统计

hibernate ×2

java ×2

database ×1

paging ×1