1. 首页
  2. 软件开发
  3. SpringData——JPA的持久化上下文(Persistence Context)和一级缓存

SpringData——JPA的持久化上下文(Persistence Context)和一级缓存

  • 发布于 2024-08-17
  • 14 次阅读

JPA的持久化上下文是一个在应用程序和数据库之间管理实体对象的临时存储区域。一级缓存是持久化上下文中的一部分,用于缓存已经查询过的实体对象,以提高性能并确保数据的一致性。

代码如下:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

@Repository
@Transactional
public class UserRepository {
   

    @PersistenceContext
    private EntityManager entityManager;

    public void updateUserEmail(Long userId, String newEmail) {
   
        User user = entityManager.find(User.class, userId); // 查询用户实体
        user.setEmail(newEmail); // 修改用户邮箱
        // 这里不需要显式调用 entityManager.merge(user),因为实体已经在持久化上下文中被管理
    }

    public User getUserById(Long userId) {
   
        return entityManager.find(User.class, userId); // 查询用户实体
    }
}

在上面的示例中,UserRepository类包含了两个方法:updateUserEmail和getUserById。在updateUserEmail方法中,我们首先通过EntityManager的find方法查询并获取一个用户实体,然后修改了用户的邮箱地址。由于实体对象在持久化上下文中被管理,所以对实体的修改会自动同步到数据库中,不需要显式调用merge方法。

在getUserById方法中,同样使用EntityManager的find方法查询用户实体。如果该用户实体已经在一级缓存中,那么会直接从缓存中获取,而不会再次发送查询语句到数据库。

原文链接: https://blog.csdn.net/2401_82884096/article/details/138148548