春季数据mongodb @dbref列表



我试图使用@DBRef的模型中有一个列表,但我无法使其工作。这是我的用户模型:

@Data
@Document
public class User {
    @Id
    @JsonSerialize(using = ToStringSerializer.class)
    private ObjectId id;
    @Indexed(unique = true)
    @NotBlank
    private String email;
    @NotBlank
    private String name;
    @NotBlank
    private String password;
    @DBRef
    private List<Server> servers;
}

服务器型号:

@Data
@Document
public class Server {
    @Id
    @JsonSerialize(using = ToStringSerializer.class)
    private ObjectId id;
    @NotBlank
    private String name;
    @NotBlank
    private String host;
}

结构非常简单,每个用户都可以具有多个服务器。但是,当我将服务器添加到用户时,创建了服务器,但是服务器数组包含一个null条目("servers" : [ null ])。因此,服务器未添加到用户。这就是我创建服务器并将其添加到用户的方式:

@PostMapping
public Mono create(@Valid @RequestBody Server server, Mono<Authentication> authentication) {
    return this.serverRepository.save(server).then(authentication.flatMap(value -> {
        User user = (User) value.getDetails();
        user.getServers().add(server);
        return userRepository.save(user);
    })).map(value -> server);
}

因此,我只需创建并保存服务器,添加服务器,然后保存用户。但这无效。我一直有一个null输入的数组。

我已经看过此页面:http://www.baeldung.com/cascading-with-dbref-and-lifecycle-events-in-spring-data-mongodb。但这是为了保存儿童文档,而不是为了链接它。它也用于单个文档,而不是数组或列表。

为什么我的列表未正确保存?

我所有的库都来自Spring Boot版本2.0.0.M6

更新从用户服务器属性中删除@DBRef时,服务器已保存,但是它们当然会在server集合中和每个user.servers中获得双重创建。因此,错误与参考有关。

谷歌搜索后,我找到了答案...
https://jira.spring.io/browse/datamongo-1583
https://jira.spring.io/browse/datamongo-1584

反应性mongo不支持这一点。

实际上有一种方法可以解决dbrefs,而无需使用阻止驱动程序。是的 - 参考文献以阻塞方式解决,但不需要第二个连接。为了实现这一目标,我们必须编写自己的dbrefresolver:nbdbrefresolver.java。在提供的解析器中,有一个标志:resolve_db_refs_by_id_only。如果打开,则不会从数据库中解析DBREF,而是将它们解决到只有ID的假对象。以后以非阻滞方式填写参考资料是由实施的。

如果将标志Resolve_DB_REFS_BY_ID_ONLY设置为false,它将通过使用非块驱动程序来急切地解析引用,但会阻止执行直到解决引用解决。这是在应用中注册DBRefresolver的方法:dbconfig.kt

附加的文件在此处提供:https://jira.spring.io/browse/datamongo-1584

我这样的角色是这样做的:

  @Unwrapped(onEmpty = Unwrapped.OnEmpty.USE_NULL)
  private Collection<Role> roles;

您可以在此处检查DOC(2021):https://spring.io/blog/2021/04/20/what s-new-new-inew-ine-spring-data-2021-2021-0

相关内容

  • 没有找到相关文章

最新更新