0
我很難弄清楚這一點。 問題是,我有一個包含特定遊戲中用戶分數的表格。 所以,我有2個實體稱爲用戶和遊戲。 用戶有一個遊戲沒有直接關係,而艾在具有以下字段中輸入數據庫視圖:hibernate - 如何基於使用Criteria API的子查詢進行投影?
public UserScore implements Serializable {
@Id
@ManyToOne
private Game game;
@Id
@ManyToOne
private User user;
private Long score;
}
那麼,是什麼。我需要給定一個用戶和遊戲,我需要的分類該遊戲中的該用戶基於他的分數。 的SQL查詢,做到這一點是:
select user.name as name,
scores.score as myScore,
count(distinct countScores.score) as classification
from user INNER JOIN userscore as scores ON user.id = scores.user_id,
userscore as countScores
where user.id = 66 and scores.game_id = 666
and countScores.game_id = 666 and countScores.score > scores.score
group by user.id;
假設66是你想要的分類位置和666,你們考慮遊戲的ID的用戶的ID。 所以,這個工作,但如何將其轉化爲Hibernate標準API? 既然不能創建多個根實體的標準,我tryed做到以下幾點:
DetachedCriteria countCriteria = DetachedCriteria.forClass(UserScore.class, "countScores")
.add(Restrictions.eq("game.id", 666))
.add(Restrictions.gtProperty("score", "scores.score"))
.setProjection(Projections.countDistinct("score"));
this.session.createCriteria(User.class)
.add(Restrictions.eq("id", 66))
.createAlias("userScore", "scores", JoinType.INNER_JOIN, Restrictions.eq("game", 666))
.setProjection(Projections.projectionsList()
.add(Projections.property("name"), "name")
.add(Projections.property("scores.score"), "myScore")
.add(Projections.groupProperty("id"))
// Here is where this is killing me:
// .add(Projections.SOMETHING(countCriteria), "classification")
);
...
所以,這就是問題所在,我怎麼能作爲回報字段中選擇設置的結果子查詢? 必須有辦法做到這一點,否則我沒有想法來解決這種困境。
預先感謝您。
據我所知,'DetachedCriteria'只能用作限制,它可能不是更多鈔票從一個子查詢獲取數據與標準... – Ziul
SQL中的東西看起來不對。 'scores'和'countScores'都是同一個表'userscore'的別名。所以條件'countScores.score> scores.score'將導致查詢總是返回0條記錄。 – yair