如果使用的是JPA 2.0,则可以使用EntityManager#detach()从持久性上下文中分离单个实体。另外,Hibernate具有一个Session#evict(),它具有相同的作用。
由于JpaRepository本身不提供此功能,因此您可以向其添加自定义实现,如下所示
public interface UserRepositoryCustom {
…
void detachUser(User u);
…
}
public interface UserRepository extends JpaRepository
…
}
@Repository
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
…
@PersistenceContext
private EntityManager entityManager;
@Overridepublic void detachUser(User u) { entityManager.detach(u);}...}
我没有尝试过此代码,但是您应该可以使其工作。您甚至可以尝试通过保留EntityManager服务类(在哪里updateUser())@PersistenceContext,并避免将自定义实现添加到存储库的麻烦。



