java - 有没有办法访问 Springframework 存储库 "refresh"?

标签 java spring spring-boot

我有一个 View 实体,以及该 View 正在连接的表之一的实体:

ViewEntity
TableEntity

共享主键“SharedId”。

在我的服务类中,我声明了两个实体的存储库,并具有一个更新 TableEntity 状态的函数,并返回具有相同 SharedId 的相应 ViewEntity 的后续结果(应显示更新后的状态,如查看它是基于连接 TableEntity 表中的“status”列):

class MyService {
    @Autowired
    ViewEntityRepository viewEntityRepository;

    @Autowired
    TableEntityRepository tableEntityRepository;

    ViewEntity updateTableEntity(String newStatus, TableEntity tableEntity) {
        tableEntity.status = newStatus;
        tableEntityRepository.save(viewEntity);
        ViewEntity ret = viewEntityRepository.findBySharedId(tableEntity.SharedId);
        return ret;
    }
}

问题是 ViewEntity ret 没有反射(reflect)新的状态更改(它具有旧的状态值,如果没有与此 SharedId 对应的先前 TableEntity,则为 null)。有谁知道为什么吗?

我猜测这是因为 viewEntityRepository 在保存 TableEntity 状态之前实例化,因为后续调用将返回具有上一次调用的 TableEntity 状态的 ViewEntity (例如,第一次调用 TableEntity status = "NEW"将返回ViewEntity status = null,第二次调用 TableEntity status =“MOVED”将返回 ViewEntity status =“NEW”)。

有没有办法在 tableEntityRepository.save 之后“刷新”或重新实例化 viewEntityRepository,以便使用最新的 TableEntity 状态更新 viewEntityRepository(假设 ViewEntity 的 View 在保存 TableEntity 的表时更新)?

最佳答案

使用 EntityManager 刷新返回项(需要 @Transactional 注解),并使用 saveAndFlush() 而不是 save(),修复了此问题:

class MyService {
  @Autowired
  ViewEntityRepository viewEntityRepository;

  @Autowired
  TableEntityRepository tableEntityRepository;

  @PersistenceContext
  EntityManager entityManager

  @Transactional
  ViewEntity updateTableEntity(String newStatus, TableEntity tableEntity) {
      ViewEntity ret = viewEntityRepository.findBySharedId(tableEntity.SharedId);
      tableEntity.status = newStatus;
      tableEntityRepository.saveAndFlush(viewEntity);
      entityManager.refresh(ret)
      return ret;
  }
}

关于java - 有没有办法访问 Springframework 存储库 "refresh"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59314644/

相关文章:

java - 这段代码代表了多线程服务器的实现?

java - 如何在eclipse kepler中安装spring框架?

Spring Boot 应用程序特定的外部属性

java - Spring Boot库和应用程序结构

java - 根据 Activity 的 Spring 配置文件提供一个 Maven 依赖项

java - 微软access数据库转java

java - 共享对象并从主线程控制线程执行

java - .zip 项目的 Maven 程序集,仅包含 .jar 和配置文件

java - 出现意外错误(类型=不支持的媒体类型,状态=415)。不支持内容类型 'null'

java - 在 Tomcat 上部署时,Spring Boot HATEOAS 链接错误