Hibernate Criteria + join的性能问题

时间:2013-10-14 13:42:26

标签: java hibernate criteria

我使用Criteria面临性能问题并离开了加入。以下是我的询问:

Criteria crit = session.createCriteria(CuttingAssignment.class);
    crit.add(Restrictions.eq("cuttingMachine", cuttingMachine));
    crit.createAlias("cuttingBatch", "cuttingBatch");
    crit.addOrder(Order.asc("psn"));
    crit.setFetchMode("cuttingBatch", FetchMode.JOIN);
    crit.setFetchMode("cuttingMachine", FetchMode.JOIN);
    crit.createAlias("cuttingBatch.isolatingBatches", "cuttingBatch.isolatingBatches", Criteria.LEFT_JOIN);
    crit.createAlias("cuttingBatch.isolatingBatches.assignments", "cuttingBatch.isolatingBatches.assignments", Criteria.LEFT_JOIN);
    crit.createAlias("cuttingBatch.articleType", "cuttingBatch.articleType");
    crit.setFetchMode("cuttingBatch.articleType", FetchMode.JOIN);
    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    List<CuttingAssignment> cuttingAssignmentList = crit.list();

现在它会在DB中执行如此多的SQL查询,因为我面临性能问题?

优化Criteria Query有哪些方法?标准和HQL查询之间有什么区别吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

是的,HQL比标准更有效,更简单。如果一个人不懂SQL,我可以理解使用Criteria查询,但总的来说我更喜欢HQL。

答案 1 :(得分:0)

请发布你的HSQL进行比较。通常,HSQL只会向数据库发送一个语句,而Criteria API可能会发送多个语句,具体取决于延迟关联的数量。如果要使用外部联接在一个查询中获取延迟关联,请选中Criteria Query第15.5段