Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用';id';在Spring数据中通过MongDB API使用DocumentDB时?_Java_Mongodb_Spring Data_Azure Cosmosdb - Fatal编程技术网

Java 如何使用';id';在Spring数据中通过MongDB API使用DocumentDB时?

Java 如何使用';id';在Spring数据中通过MongDB API使用DocumentDB时?,java,mongodb,spring-data,azure-cosmosdb,Java,Mongodb,Spring Data,Azure Cosmosdb,我使用了映射\u id的两种方法,如中所述 使用@Id注释 具有名称为id且没有任何注释的字段 在我之前的项目中,我们使用MongoDB作为DAO操作的数据库和Spring数据。它对Stringa和biginger都能正常工作 现在我们是(因为Spring数据不支持DocumentDB)。 我可以使用所有Spring数据方法,但不能使用自定义id 以下是我的实体: public class S{ private String id; /* other fields her

我使用了映射
\u id
的两种方法,如中所述

  • 使用
    @Id
    注释
  • 具有名称为
    id
    且没有任何注释的字段
在我之前的项目中,我们使用MongoDB作为DAO操作的数据库和Spring数据。它对
String
a和
biginger
都能正常工作

现在我们是(因为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 */
}
这是道:

public interface SDao extends MongoRepository<S, String> {

}
记录成功地以自定义id
此处的某些id
作为
String
(非
ObjectId
)保存在数据库中,但之后它抛出
ClassCastException
表示
Long
无法转换为
整数

id使用
biginger
时的情况也是如此

如果我没有设置自定义id,即我对
id
的设置进行如下注释:

s = new S();
// s.setId("some-id-here");
没有引发异常,但记录将使用数据库本身提供的随机id保持,该id为
ObjectcId

我想用自定义id保存记录,以便在需要时轻松更新。 目前,如果我必须更新一条记录,我需要使用一个未映射到
\u id
的键检索它,然后更新它,然后从数据库中删除旧记录,然后保存更新后的记录,我觉得这是绝对低效的,因为我无法使用
\u id

我的问题是为什么我得到
ClassCastException
,这也提到了
Long
整数的转换


DocumentDB正在内部执行一些转换,这会引发此异常。如果是,如何解决?这是一个bug吗?

这里解释了id生成规则

一种替代方法是默认情况下让
DocumentDB/MongoDB
为您创建这些
id
。在您的类中,您可以有另一个字段作为自然ID,并在该字段上创建一个唯一的索引以进行获取优化。
请参阅索引。

是的,在遵循创建自定义id的规则时,我遇到了异常(尽管记录正在持久化)。您可能正在寻找发布的此解决方案,因此我记得在使用MongoDB作为直接数据存储时没有创建任何自定义转换器。嗯,让
mongoDB
/
DocumentDB
创建的默认
id
出现在类中,并使用我们自己的自然id进行操作。虽然现在有一个额外的字段,但与我们之前为更新操作所做的变通方法相比,它仍然是可以负担得起的。谢谢
s = new S();
// s.setId("some-id-here");