0

我正在使用不可变对象与 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();
}

我在这里做错了什么?

谢谢,

阿马尔

4

1 回答 1

1

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

要么管理你自己的 id 生成(可能通过AtomicInteger.incrementAndGet()),要么让它由 Immutable 库管理

  @Mongo.Id
  @Value.Default
  public Id id() {
    return Id.generate();
  }
于 2018-07-30T10:22:04.663 回答