我使用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();
}
我在这里做错了什么?
谢谢,
阿玛尔
答案 0 :(得分:1)
这是因为尝试构建对象时未设置id()。
要么管理您自己的ID生成(可能通过AtomicInteger.incrementAndGet()
),要么让它由不可变库管理
@Mongo.Id
@Value.Default
public Id id() {
return Id.generate();
}