我在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();*

10-04 11:04