3
也許這聽起來像是一個簡單的問題,但是在數據庫中增加計數器的正確方法是什麼?JPA/Hibernate如何正確增加數據庫中的計數器?
例如,如果我有一個包含「like_count」列的表格,每次用戶喜歡照片時都會更新。
(假設我有我的照片@Entity)
Photo photo = photoRepository.findByPhotoId(id)
photo.setLikeCount(photo.getLikeCount()+1);
photoRepository.save(photo)
例如,是上面的代碼是否正確?會出現任何種族情況嗎?
謝謝
我認爲你是對的。我只給出兩個建議:第一個是你不需要使用photoRespository.save(),因爲照片實體已經與會話關聯。如果你修改它的態度,修改將在交易結束時保持不變。第二個是,當用戶喜歡這張照片時,你應該記錄用戶的ID,因爲通常一個用戶可以只喜歡一張照片。 – MageXellos 2014-12-04 01:17:19
謝謝你的回覆!很高興知道我不需要擔心這樣的競賽條件或其他問題。我試過不使用.save,但它不會保留在我的數據庫中? (我的數據庫是PostgreSQL,我正在使用entityManager(不是會話)是這個原因嗎? – Johny19 2014-12-04 08:53:22
我現在的工作仍在開發一個使用PostgreSQL的軟件,但是我們還沒有使用entityManager,所以我不能給你一個令人驚訝的答案。知道,如果你使用會話,你真的不需要在同一會話中使用save()。也許這就是爲什麼你必須使用save()來保存實體,但我認爲它沒問題。 – MageXellos 2014-12-05 00:55:11