每次连接都将您从最左边的类型参数带到最右边的参数。因此,
details我的代码(第二行)的连接从开始
fromUpdates,即a
Path<Update>,并在幕后创建了a
Path<Detail>。由此,您可以建立其他联接。试试看(代码未经测试):
Root<Update> fromUpdates = query.from(Update.class);Join<Update, Detail> details = fromUpdates.join("details");Join<Detail, Associate> associate = details.join("associate");List<Predicate> conditions = new ArrayList();conditions.add(builder.equal(associate.get("associateId"), associateId));conditions.add(builder.isNull(details.get("ack_date")));TypedQuery<Update> typedQuery = em.createQuery(query .select(fromUpdates) .where(conditions.toArray(new Predicate[] {})) .orderBy(builder.asc(fromUpdates.get("updateId"))) .distinct(true));


