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

带java.util.Date字段的MongoDB文档的Spring乐观锁

齐承泽
2023-03-14

我试图为现有MongoDB数据库中的文档实现乐观锁定。目前没有version字段,我希望避免添加它,因为我们将不得不停止应用程序

但是有一个lastmodifieddate字段,我似乎可以这样使用它:

@LastModifiedDate
@Version
private Date lastModified;
@Configuration
public class MongoConfig extends AbstractMongoConfiguration {

    ...

    @Override
    public CustomConversions customConversions() {
        return new CustomConversions(CustomConversions.StoreConversions.NONE,
            Arrays.asList(
                new DateToNumberConverter(),
                new LongToDateConverter()
        ));
    }
}

这就像是对现有文档的一种魅力。但是当我尝试添加一个新文档时,我得到:

找不到能够从[java.lang.Integer]类型转换为[java.util.date]类型的转换器

如果我添加一个整数到日期转换器,那么新文档将保存在数据库中,但所有日期现在都是NumberLong而不是ISODate,即是“lastmodified”:ISODate("2018-10-02t07:30:12.005z“)和现在”lastmodified“:NumberLong("1538465479364”)。这打破了现有文档和新文档之间的一致性。

所以问题是:

  1. 是否可以将java.util.date@version一起使用,以便在MongoDB中将所有日期存储为Isodate
  2. 除了https://docs.Spring.io/Spring-Data/MongoDB/docs/current/reference/html/#mongo-template.optigent-locking之外,还有谁能指出有关MongoDB的Spring数据中的乐观锁定的文档吗?

共有1个答案

闻鹤龄
2023-03-14

似乎目前不可能使用Date作为版本字段,因为它在MongoTemplate中被强制转换为Number。我通过使用自定义MongoTemplate解决了这个问题,它扩展了Spring数据MongoTemplate并覆盖了所需的方法。不幸的是,我不得不复制粘贴大量代码,因为重写的逻辑在私有方法中。

 类似资料:
  • 我不得不向现有文档添加一个新字段/s。 下面是用于测试目的的过程AddNewField。 我做错了什么? 在调用fmongo.update后,我的收藏现在有两个文档!

  • 我已经实现了Serializable、实现了hashCode和equals。 我在MongoDB文档类中使用自定义键类,如下所示。 我可以使用spring data mongodb将文档保存到mongodb中。 我首先使用的标准如下。 根据上述标准,我然后执行一个update状态, 但是,我的更新失败,出现错误,

  • 我想从引用的文档中获取字段值。Mongodb版本是3.4。 假设我有两个收藏foo和bar。Foo提到bar: 相应的条形码文档看起来像这样: 我尝试了以下聚合函数来归档此结果: 聚合功能: 但我的结果是这样的: 我试着用谷歌搜索它,我查看了mongodb文档,但没有找到解决方案。 是我错过了什么还是这不可能? 谢谢

  • 我有多个mongodb文档,其中有一些不同的字段,但有一个相同的字段名作为标识符。如何使用同一字段查询不同的文档?例如,以下文档都有一个“name”字段,但没有其他公共字段。 如果我想询问所有23岁的男性,我会怎么做?以下代码不返回任何内容,因为没有包含这两个字段的文档。相反,有两个单独的文档,每个文档都有一个匹配字段。

  • 我正在浏览Spring Data MongoDB参考文档,发现示例有点过于简单。 特别是,我试图了解如何在并发环境中处理陈旧数据。例如,假设我有以下实体: 但是我有点担心,如果我想做的每种类型的更新都需要一个新的方法,那么我的存储库接口将无法控制地增长。 我意识到我实际上还没有提出一个问题,所以现在开始了:在MongoDB中使用Spring数据设计应用程序的最佳实践是什么?

  • 我正在尝试使用Spring Data mongodb更新mongodb中嵌入文档中的数组字段。 我想在mongodb集合中更新/插入的文档结构如下所示。 可以有更多这样的文档基于每个类型的部门,如“销售”,“市场营销”等。 即使这样做有效,我也不确定在Spring Data MongoDB中实现相同的功能是否有类似的支持。 另外,我的另一个查询是,如果我想为多个部门添加/更新员工,比如“Accou