我有以下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)。但是,当我尝试保存Team对象时,我收到一条错误消息,指出MongoDB不知道如何生成DBId。任何线索?
答案 0 :(得分:0)
MongoDb(或任何数据库)不知道如何生成字符串ID,而不通知它字符串的值是什么。
默认@Id
是ObjectId的字符串表示形式,可以由MongoDB自动生成。如果要将字符串ObjectId的类型更改为类,则至少该类需要定义:
**转换为字符串(可序列化),例如:
@Override
public String toString() {
return String.format(
"TeamID[uniqueString=%s]",
myUniqueString);
}
**如何生成Id。
您可以在TeamRepository中定义一个方法,即save()
,以指定如何生成字符串。或者你可以看看
https://www.mkyong.com/mongodb/spring-data-mongodb-auto-sequence-id-example/
示例指定getNextSequenceId()
生成NumberLong
自定义ID。希望能指导您的答案。