我需要使用detachedCriteria进行此SQL查询:
SELECT g.id FROM games g WHERE NOT EXISTS ( SELECT 1 FROM users_games ug WHERE ug.user_id = 1 AND g.id = ug.game_id)
这个想法是从不属于用户的游戏中获取ID。我尝试了与detachedCriteria类似的10种不同方法,但得到了“未知实体:null” MappingException代码应类似于:
DetachedCriteria subquery = DetachedCriteria.forClass(UserGame.class, "ug") .add(Restrictions.eq("ug.user.id", 1)) .add(Restrictions.eqProperty("ug.game.id","u.id")); DetachedCriteria criteria = DetachedCriteria.forClass(Game.class, "g") .add(Subqueries.notExists(subquery));
还设置投影以仅返回游戏的ID。
有任何想法吗?我认为Hibernate在加入没有别名的查询时会遇到一些麻烦。添加别名是可行的,但结果是完全错误的。
您需要添加一个别名,如下所示:
DetachedCriteria subquery = DetachedCriteria.forClass(UserGame.class, "ug") .addAlias("ug.user", "user") .add(Restrictions.eq("user.id", 1)) .addAlias("ug.game", "game") .add(Restrictions.eqProperty("game.id","u.id"));
那应该有帮助