spring data jpa 清除一级缓存

手动清除缓存

  1. 注入 javax.persistence.EntityManager
  2. 获取 org.hibernate.Session
  3. 调用clear();
@Autowired
    private EntityManager entityManager;
	void method(){
          
   
		// clear session cache.next query from db
		entityManager.unwrap(Session.class).clear();
//        Session session = (Session) entityManager.getDelegate();
//        session.clear();

// 		entityManager.clear();
		// doSomething()
	}

手动提交事务

@Autowired
    private EntityManager entityManager;

    @Autowired
    private PlatformTransactionManager transactionManager;
    @Autowired
    private TransactionDefinition transactionDefinition;

    public User save(User user) {
          
   
        TransactionStatus transactionStatus = transactionManager.getTransaction(transactionDefinition);

        User save = null;
        try {
          
   
            save = userDao.save(user);
            transactionManager.commit(transactionStatus);
        } catch (Exception e) {
          
   
            transactionManager.rollback(transactionStatus);
            throw e;
        }
//        entityManager.unwrap(Session.class).clear(); // clear session cache.next query from db
//        Session session = (Session) entityManager.getDelegate();
//        session.clear();
        save = findById(save.getId());
        System.out.println("getUpdateDt2: "+save.getUpdateDt());
        return save;
    }
经验分享 程序员 微信小程序 职场和发展