JPA SQL子查询不起作用-方法未定义

时间:2019-10-13 16:20:56

标签: java mysql jpa rapidclipse

在MySql中有这样的查询:

SELECT * FROM runninggame WHERE game = 6 AND spieler IN (SELECT id FROM spieler WHERE tormann = 1);

该查询在MySQL中运行良好,并且我的RunninggameDAO.java中需要一个类似的查询。我在Rapidclipse的JPA-SQL-Editor中进行了尝试:

findGoaliesInGame (Game game) {
select * from Runninggame where game = :game and spieler in (select id from Spieler where tormann = 1) order by spieler

}

JPA-SQL-Editor没有显示任何错误,但是在DAO类的Java-Tab中,“ subquery.multiselect(subqueryRoot.get(Spieler_.id));”行中有错误。 =>“对于Subquery类型,未定义方法multiselect(subqueryRoot.get(Spieler_.id))”

public List<Runninggame> findGoaliesInGame(final Game game) {
    final EntityManager entityManager = em();
    final CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    final ParameterExpression<Game> gameParameter = criteriaBuilder.parameter(Game.class, "game");
    final CriteriaQuery<Runninggame> criteriaQuery = criteriaBuilder.createQuery(Runninggame.class);
    final Subquery<Integer> subquery = criteriaQuery.subquery(Integer.class);
    final Root<Spieler> subqueryRoot = subquery.from(Spieler.class);
    subquery.multiselect(subqueryRoot.get(Spieler_.id));
    subquery.where(criteriaBuilder.equal(subqueryRoot.get(Spieler_.tormann), criteriaBuilder.literal(1)));
    final Root<Runninggame> root = criteriaQuery.from(Runninggame.class);
    criteriaQuery.where(criteriaBuilder.and(criteriaBuilder.equal(root.get(Runninggame_.game), gameParameter),  root.get(Runninggame_.spieler).in(subquery)));
    criteriaQuery.orderBy(criteriaBuilder.asc(root.get(Runninggame_.spieler)));
    final TypedQuery<Runninggame> query = entityManager.createQuery(criteriaQuery);
    query.setParameter(gameParameter, game);
    return query.getResultList();
}

此代码是由Rapidclipse生成的,无法更改,因此如何在Rapidclipse中管理此查询? 任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这种子选择似乎存在问题,因此我为此创建了一个问题。

但是此查询的简写版本似乎可以正常工作:

findGoaliesInGame(Game game) {
    from Runninggame
    where game = :game
        and spieler.tormann = 1
    order by spieler
}

我希望这对您有帮助!