在 Spring 数据中通过 MongDB API 使用 DocumentDB 时如何使用 'id'?
How to use 'id' when using DocumentDB via MongDB API in Spring DATA?
我已经使用了 _id
中描述的两种映射方式 Spring Docs here。
- 使用
@Id
注释
- 有一个名称为
id
的字段没有任何注释
在我之前的项目中,我们使用 MongoDB 作为数据库,Spring 数据用于 DAO 操作。它对 String
和 BigInteger
.
都没有任何问题
现在我们 using DocumentDB with MongoDB API(因为 Spring 数据不支持 DocumentDB)。
我可以使用所有 Spring 数据方法,但我无法使用自定义 ID。
下面是我的实体:
public class S{
private String id;
/* other fields here */
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
/* getters and setters for other fields */
}
这是 DAO:
public interface SDao extends MongoRepository<S, String> {
}
现在,如果我的代码中有任何地方我会这样做:
s = new S();
s.setId("some-id-here");
记录成功保存在数据库中,自定义 ID some-id-here
为 String
(不是 ObjectId
),但之后它抛出 ClassCastException
说 Long
无法转换为 Integer
.
使用 BigInteger
作为 id 时也是如此。
如果我没有设置自定义id,即我将id
的设置注释如下:
s = new S();
// s.setId("some-id-here");
没有抛出异常,但记录正在使用数据库本身提供的随机 ID 保存为 ObjectcId
。
我想用自定义 id 保存记录,以便我可以在需要时轻松更新它。
目前,如果我必须更新记录,我需要使用未映射到 _id
的键检索它,然后更新它,然后从数据库中删除旧记录,然后保留更新的记录,我觉得效率绝对低下,因为我无法使用 _id
.
我的问题是为什么我得到 ClassCastException
,这也提到了 Long
到 Integer
的转换
DocumentDB 是否在内部执行某些引发此异常的转换。如果是,如何解决?这是一个错误吗?
id生成规则在这里解释link
另一种方法是让 DocumentDB/ MongoDB
默认为您创建 IDs
。在您的 class 中,您可以有另一个字段可以用作自然 ID,并在该字段上创建一个唯一索引以进行提取优化。
参考 https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/ 索引。
我已经使用了 _id
中描述的两种映射方式 Spring Docs here。
- 使用
@Id
注释 - 有一个名称为
id
的字段没有任何注释
在我之前的项目中,我们使用 MongoDB 作为数据库,Spring 数据用于 DAO 操作。它对 String
和 BigInteger
.
现在我们 using DocumentDB with MongoDB API(因为 Spring 数据不支持 DocumentDB)。 我可以使用所有 Spring 数据方法,但我无法使用自定义 ID。
下面是我的实体:
public class S{
private String id;
/* other fields here */
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
/* getters and setters for other fields */
}
这是 DAO:
public interface SDao extends MongoRepository<S, String> {
}
现在,如果我的代码中有任何地方我会这样做:
s = new S();
s.setId("some-id-here");
记录成功保存在数据库中,自定义 ID some-id-here
为 String
(不是 ObjectId
),但之后它抛出 ClassCastException
说 Long
无法转换为 Integer
.
使用 BigInteger
作为 id 时也是如此。
如果我没有设置自定义id,即我将id
的设置注释如下:
s = new S();
// s.setId("some-id-here");
没有抛出异常,但记录正在使用数据库本身提供的随机 ID 保存为 ObjectcId
。
我想用自定义 id 保存记录,以便我可以在需要时轻松更新它。
目前,如果我必须更新记录,我需要使用未映射到 _id
的键检索它,然后更新它,然后从数据库中删除旧记录,然后保留更新的记录,我觉得效率绝对低下,因为我无法使用 _id
.
我的问题是为什么我得到 ClassCastException
,这也提到了 Long
到 Integer
DocumentDB 是否在内部执行某些引发此异常的转换。如果是,如何解决?这是一个错误吗?
id生成规则在这里解释link
另一种方法是让 DocumentDB/ MongoDB
默认为您创建 IDs
。在您的 class 中,您可以有另一个字段可以用作自然 ID,并在该字段上创建一个唯一索引以进行提取优化。
参考 https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/ 索引。