我在Criteria API中加入时遇到问题-我需要执行以下SQL:
SELECT eventConf.DEPT_ID FROM EVENT_CONF eventConf JOIN EVENT event ON event.EVENT_CONF_ID = eventConf.ID JOIN TASK task ON task.EVENT_ID = event.ID;
问题是,当尝试将其“转换”为Criteria API类时,
像这样:
Subquery<Long> subquery3 = cq.subquery(Long.class);
Root<EventConf> subquery3Root = subquery3.from(EventConf.class);
Join<EventConf, Event> eventJoin = subquery3Root.join(Event_.eventConf);
我的IDE向我展示了
Cannot resolve method 'join(javax.persistence.metamodel.SingularAttribute<atc.edpo.source.entity.Event,atc.edpo.source.entity.EventConf>)
这是可以理解的,因为Event_.evenConf是SingularAttribute 和Root的类型,参数化为EventConf,但是当目标实体包含源实体的ID时,如何进行联接?还是可以在这种情况下模拟Join的某种形式?
最佳答案
*You can use FetchMode
Criteria critiera = sessionFactory.getCurrentSession().createCriteria(EventConf.class);
critiera.setFetchMode("event", FetchMode.JOIN)
.setFetchMode("task", FetchMode.JOIN)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
critiera.list();*