@Override
@Cacheable(value = "user-cache", key = "#login", unless = "#result == null")
public User findUserByLogin(final String login)
{
return em.find(User.class, login);
}
たとえば、以下のようにパスワードを null に設定した場合。次の呼び出しでキャッシュがヒットし、そこにあるパスワードが NULL に設定されているため、キャッシュ値もそれに応じて変更されます。これは正しい動作ですか?オブジェクトを変更したい場合、取得するたびに新しいオブジェクトを作成する必要がありますか?データベースではなくサービスレベルで変更することについて話しているのです。
public User getUserByLogin(final String login)
{
final User user = userRepository.findUserByLogin(login);
user.setPassword(null);
return user;
}