我有以下MongoDB存储库
public interface TeamRepository extends MongoRepository<Team, TeamId> {
....
}
和以下类:
public abstract class DbId implements Serializable {
@Id
private final String id;
public DbId(final String id) { this.id = id;}
public String getId() { return id;}
}
public class TeamId extends DbId {
public TeamId(final String id) {
super(id)
}
}
如您所见,我有一个自定义的存储库id(我有MongoRepository而不是像MongoRepository这样的东西)。但是,当我试图保存一个团队对象时,我得到一个错误,说MongoDB不知道如何生成DBId。有线索吗?
MongoDb(或任何数据库)将不知道如何生成一个字符串ID没有你通知它字符串的值是什么。
默认的@Id
是ObjectId的字符串表示形式,可以由MongoDB自动生成。如果要将字符串ObjectId的类型更改为类,则该类至少需要定义:
**转换为字符串(可序列化),例如:
@Override
public String toString() {
return String.format(
"TeamID[uniqueString=%s]",
myUniqueString);
}
**如何生成Id。
你可以在你的TeamRepository中定义一个方法,比如save()
来指定如何生成你的字符串。或者你可以查看
本例中指定getNextSequenceId()
生成NumberLong
自定义id。希望这能引导你找到答案。