不可变的mongo没有设置一些必需的属性

时间:2018-01-31 05:32:34

标签: mongodb immutables-library

我使用immutables与MongoDB进行交互。 我在下面创建一个非常简单的例子: -

@Mongo.Repository
@Value.Immutable
@Gson.TypeAdapters
@JsonDeserialize(as = ImmutablePerson.class)
@JsonSerialize(as = ImmutablePerson.class)
public interface Person {

    @Mongo.Id
    @Value.Auxiliary
    int id();

    String name();
}

当我通过

创建对象时
ImmutablePerson.builder().name("Amar").build();

我得到一个例外,其中包括: -

Cannot build Person, some of required attributes are not set [id]
    at com.model.ImmutablePerson$Builder.build(ImmutablePerson.java:247) ~[classes/:na]
    at com.Main.run(Main.java:56) [classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:732)

我也尝试过以下方法,但它也不起作用。

@Mongo.Repository
@Value.Immutable
@Gson.TypeAdapters
@JsonDeserialize(as = ImmutablePerson.class)
@JsonSerialize(as = ImmutablePerson.class)
public abstract class Person {

    @Mongo.Id
    @Value.Auxiliary
    public abstract int id();

    public abstract String name();
}

我在这里做错了什么?

谢谢,

阿玛尔

1 个答案:

答案 0 :(得分:1)

这是因为尝试构建对象时未设置id()。

要么管理您自己的ID生成(可能通过AtomicInteger.incrementAndGet()),要么让它由不可变库管理

  @Mongo.Id
  @Value.Default
  public Id id() {
    return Id.generate();
  }