【问题标题】:Spring @Transactional is not commited. Neo4JSpring @Transactional 未提交。 Neo4J
【发布时间】:2021-03-26 10:51:59
【问题描述】:

我有一个实体用户,它与实体组织有 WORKS_FOR 关系。组织与其中的所有用户都有关系 HAS_EMPLOYEE 和关系 HAS_ANCHOR,整个组织都有一个锚点来管理它。我正在尝试使用“HAS_EMPLOYEE”列表中的另一个用户更新组织实体以成为新的锚点。但是方法后db没有变化,也没有抛出运行时异常。

@Transactional
public OrganizationDTO changeAnchorForOrganization(UUID prevAnchorId, UUID newAnchorId) {
    User newAnchor = userService.getAnyUserById(newAnchorId);
    if (!newAnchor.isActive()) {
        throw new BadRequestException(ExceptionType.REQUEST_BODY_INVALID);
    }
    User prevAnchor = userService.getAnyUserById(prevAnchorId);
    Organization organization = getOrganizationByAnchorId(prevAnchorId);
    Set<String> prevAnchorPermissions = prevAnchor.getPermissions();
    prevAnchorPermissions.remove(SubRolesConstants.anchor);
    prevAnchor.setPermissions(prevAnchorPermissions);
    Set<String> newAnchorPermissions = newAnchor.getPermissions();
    newAnchorPermissions.add(SubRolesConstants.anchor);
    newAnchor.setPermissions(newAnchorPermissions);
    organization.setAnchor(newAnchor);
    return organizationMapper.entityToDTO(organization);
}

organization.setAnchor(newAnchor); 这行不行? 结果 DTO 对 org 锚点进行了更改,但 db 没有。如果我在这种方法之后尝试获得组织,我将获得旧版本的组织(带有以前的锚) 坚持了很长时间。也许有人可以帮助我?

【问题讨论】:

  • 您使用的是什么版本的 Spring Data Neo4j?此外,我在您的代码中没有看到任何服务调用来保存更改。
  • 我认为@transactional 与托管实体一起操作,因此它们将在事务结束时由实体管理器保存。 spring data neo4j的版本是2.3.2 RELEASE
  • Spring Data Neo4j 2?你确定吗?这已经多年没有维持了。你能从mvn dependency:tree提取版本吗?

标签: spring neo4j spring-data


【解决方案1】:

我错过了 organizationRepository.save(organization)。我认为这是因为 neo4j,因为默认情况下,@Transactional 注释会在服务调用结束时提交对实体所做的任何更改。或者这只是一个错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 2017-11-16
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多