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