0

我在使用 Criteria 和 left join 时遇到了性能问题。以下是我的查询:

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();

现在它将在数据库中执行这么多的 sql 查询,因为我面临性能问题?

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

提前致谢。

4

2 回答 2

0

请发布您的 HSQL 进行比较。一般来说,HSQL 只会向数据库发送一条语句,而 Criteria API 可能会发送多条语句,具体取决于惰性关联的数量。如果您想使用外连接在一个查询中获取惰性关联,请查看Criteria Query第 15.5 段

于 2013-10-14T14:33:16.040 回答
0

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

于 2013-10-14T13:53:10.207 回答