If you are using JPA 2.0, you can use EntityManager#detach() to detach a single entity from persistence context. Also, Hibernate has a Session#evict() which serves the same purpose.
Since JpaRepository
doesn’t provide this functionality itself, you can add a custom implementation to it, something like this
public interface UserRepositoryCustom {
...
void detachUser(User u);
...
}
public interface UserRepository extends JpaRepository<User, Long>, UserRepositoryCustom {
...
}
@Repository
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
...
@PersistenceContext
private EntityManager entityManager;
@Override
public void detachUser(User u) {
entityManager.detach(u);
}
...
}
I haven’t tried this code, but you should be able to make it work. You might even try to get a hold on EntityManager
in your service class (where updateUser()
is) with @PersistenceContext
, and avoid the hustle of adding custom implementation to repository.