我使用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查询之间有什么区别吗?
提前致谢。
答案 0 :(得分:0)
是的,HQL比标准更有效,更简单。如果一个人不懂SQL,我可以理解使用Criteria查询,但总的来说我更喜欢HQL。
答案 1 :(得分:0)
请发布你的HSQL进行比较。通常,HSQL只会向数据库发送一个语句,而Criteria API可能会发送多个语句,具体取决于延迟关联的数量。如果要使用外部联接在一个查询中获取延迟关联,请选中Criteria Query第15.5段