我有表格帳戶包含FK到另一個表。
選項1:使用Spring Data JPA更新實體的正確方法是什麼?
@Override
@Transactional(readOnly = false)
public Account changePassword(Account existingAccount, String newPassword){
existingAccount.setPassword(newPassword);
return accountDAO.save(existingAccount);
}
這樣一來,每當我打電話保存(),一個連接是由檢索另一個表ID,然後更新本身。
請注意,即使只更改密碼,所有字段也會更新。
編輯:我發現正在建立連接,因爲我將實體作爲參數傳遞(existingAccount)。如果我在changePassword方法中找到它,它可以正常工作(無連接)。問題是,我需要在控制器中使用此實體進行驗證,因此使相同的數據庫調用2次是毫無意義的。
選項2:
@Modifying
@Query("UPDATE Account SET password=(:pass) WHERE username=(:username)")
public void changePassword(@Param("username")String username, @Param("pass")String pass);
這種方式,僅在@Query自定義更新被執行。
我認爲選項2可能更好,如果涉及到性能,但選項1感覺更像jpa。任何建議感激。
您應該添加'Account'和'AccountRepository'界面的代碼 – 2014-11-05 16:18:33
真的沒有什麼可添加的。選項1是服務層代碼,存儲庫中沒有任何內容,選項2是存儲庫接口代碼。服務層只是調用它,就是這樣。 – Sikor 2014-11-05 16:26:09