首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >@DBRef列表

@DBRef列表
EN

Stack Overflow用户
提问于 2017-11-22 16:10:57
回答 3查看 9.3K关注 0票数 3

我正在尝试使用@DBRef在模型中列出一个列表,但我无法让它工作。这是我的用户模型:

代码语言:javascript
复制
@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;
}

服务器模型:

代码语言:javascript
复制
@Data
@Document
public class Server {

    @Id
    @JsonSerialize(using = ToStringSerializer.class)
    private ObjectId id;

    @NotBlank
    private String name;

    @NotBlank
    private String host;
}

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

代码语言:javascript
复制
@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。但这是为了保存子文档,而不是链接它。它也适用于单个文档,而不是数组或列表。

为什么我的列表没有被正确保存?

我所有的库都来自春季引导版本2.0.0.M6

当从用户的服务器属性中删除更新时,服务器将被保存,但它们当然会在server集合和每个user.servers中双重创建。所以这个错误与引用有关。

EN

回答 3

Stack Overflow用户

发布于 2017-11-22 20:06:14

在谷歌搜索后我找到了答案..。

https://jira.spring.io/browse/DATAMONGO-1583

https://jira.spring.io/browse/DATAMONGO-1584

反应性芒果不支持这一点。

票数 2
EN

Stack Overflow用户

发布于 2018-03-30 06:44:20

实际上,有一种方法可以不使用阻塞驱动程序来解析DbRefs。是的-引用是以阻塞方式解析的,但不需要第二个连接。为了实现这一点,我们必须编写自己的DbRefResolver: NbDbRefResolver.java。在提供的解析器中有一个标志: RESOLVE_DB_REFS_BY_ID_ONLY。如果打开,将不会解析数据库中的DbRefs,而是将它们解析为只带有id的假对象。以后以非阻塞的方式填充引用是由实现决定的。

如果标志RESOLVE_DB_REFS_BY_ID_ONLY设置为false,它将使用非阻塞驱动程序急切地解析引用,但会阻止执行,直到解析引用为止。下面是如何在应用程序中注册DbRefResolver : DbConfig.kt

附件中提供的文件如下:https://jira.spring.io/browse/DATAMONGO-1584

票数 0
EN

Stack Overflow用户

发布于 2021-09-04 14:07:14

我这样做是为了角色:

代码语言:javascript
复制
  @Unwrapped(onEmpty = Unwrapped.OnEmpty.USE_NULL)
  private Collection<Role> roles;

您可以在这里查看文档(2021年):https://spring.io/blog/2021/04/20/what-s-new-in-spring-data-2021-0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47439247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档