我有一个包含对另一张表的外键的Account表。
选项1:
@Override
@Transactional(readOnly = false)
public Account changePassword(Account existingAccount, String newPassword){
existingAccount.setPassword(newPassword);
return accountDAO.save(existingAccount);
}
每当我调用save()方法时,都会进行一次连接以检索另一个表的ID,然后才进行更新操作。
请注意,即使只更改密码,此处也会更新所有字段。
编辑:我发现之所以进行连接是因为我将实体(existingAccount)作为参数传递。如果我在changePassword方法中找到它,它可以正常工作(没有连接)。问题是,我需要在控制器中使用此实体进行验证,因此两次进行相同的数据库调用是无意义的。
选项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
接口的代码。 - user180100