当前位置: 首页 > 知识库问答 >
问题:

在Spring数据中通过MongDB API使用DocumentDB时,如何使用“id”?

刘瀚
2023-03-14

我使用了Spring文档中描述的映射\u id的两种方法。

  • 使用@Id注释
  • 有一个字段的名称id没有任何注释

在我之前的项目中,我们使用MongoDB作为DAO操作的数据库和Spring Data。它对StringBigintger都没有任何问题。

现在我们将DocumentDB与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 */
}

这是道:

public interface SDao extends MongoRepository<S, String> {

}

现在,如果我的代码中有任何地方:

s = new S();
s.setId("some-id-here");

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

当对id使用Bigintger时,情况也是如此。

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

s = new S();
// s.setId("some-id-here");

没有引发异常,但记录将使用数据库本身提供的随机id保持,该id为ObjectcId

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

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

DocumentDB内部是否正在进行一些转换,从而引发此异常。如果是,如何解决?这是虫子吗?


共有2个答案

范华清
2023-03-14

id生成规则在此处进行了解释

尹正奇
2023-03-14

一种替代方法是默认情况下让DocumentDB/MongoDB为您创建那些id。在您的类中,您可以有另一个字段作为自然ID,并在该字段上创建一个唯一的索引以进行获取优化。参考https://docs.mongodb.com/manual/reference/method/db.collection.createIndex/用于索引。

 类似资料:
  • 我正在使用Spring Boot2.1.3开始使用reactive websockets。我创建了一个实现,如下所示: 但是,我想对来自websocket的请求作出反应,告诉我想要的数据的id是什么。我设法获得了这样的请求信息: 现在我不知道如何结合这两个实现? 我希望能做这样的事情: 但这只是立即断开websocket客户机而不做任何事情。

  • 问题内容: 我在我的项目中尝试使用Spring数据JPA。我想知道是否有现成的API通过和来查询数据。当然,我知道我可以自己编写该方法,我只想知道是否有一个现成的方法。我的DAO扩展,我发现可以调用以下方法: 但是没有这样的方法,所以我很好奇。 问题答案: 有两种方法可以实现此目的: 如您所见,第二种形式更加灵活,因为它允许为每个属性()定义不同的方向。

  • 问题内容: 我一直是一个简单使用的人: 我将接口用作可移植性的类型名称,这样当我问诸如此类的问题时,便可以重新编写代码。 什么时候应该使用过,反之亦然? 问题答案: 摘要 用在最好许多更多使用情况比。如果不确定,请从开始。 并且是List接口的两种不同的实现。用双向链表实现它。ArrayList用动态调整大小的数组实现它。 与标准的链表和数组操作一样,各种方法将具有不同的算法运行时。 对于 是O(

  • 假设我有一个MySQL存储过程,其中包含以下选择: 如何在中使用注释,以便我可以获得结果?像这样:

  • 我使用的是spring数据,我的DAO看起来像 在上面的代码中,注释行显示了我的意图。spring数据是否可以提供内置功能,使用这样的方法查找所有记录的顺序按某一列与ASC/DESC?

  • 问题内容: 我的数据库表有一个Timestamp列,我正在使用LINQ进行插入,更新SQL数据库中的数据。现在我想在数据库中添加时间戳值,但我不知道如何? 我在网上看到各种示例,他们没有为将值自动插入到插入数据中的数据库中编写任何用于插入值的代码。虽然我在表中看到也没有默认值分配,然后如何使用uisngLINQ将时间戳插入数据库? 问题答案: 我假设您的意思是您有一个表,该表的列具有Timesta