2
考慮以下情形:休眠 - 生成的SQL包含多個字段比我更新
class User {
Long id;
BigDecimal balance;
BigDecimal rating;
@ManyToOne
Team team;
}
class Team {
Long id;
BigDecimal rating;
}
然後在代碼中,我有以下幾點:
@Transactional
void updateBalance(...) {
user.addBalance(balance); // add balance
increaseUserRating(user, balance); // update rating by an algorithm
increaseTeamRating(user.getTeam(), balance);// update team rating by an algorithm
}
所以,我希望要執行下面的SQL :
update users set balance = $1, rating = $2 where id = $3;
-- update teams as well
,但我得到:
update users set balance = $1, rating = $2, team_id = $3; -- why's the team updated huh?
這是正常行爲嗎?我懷疑team_id
已更新,以保證數據的一致性,因爲我們也更新了團隊。我對麼?
@ M.Deinum,請參閱更新。 '登錄'字段不變。 – 2014-11-06 08:11:51
這個團隊很髒,所以得到一個更新(你正在做一些提高團隊評級的東西),然後hibernate認爲,由於骯髒的團隊,它也需要更新該領域。有趣的順便說一句,在歷史上更新的所有領域(但可能已與JPA更改,不知道)。 – 2014-11-06 08:16:18
這些是完整的SQL語句嗎?沒有WHERE子句? – 2014-11-06 08:29:24