且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Java 8 日期/时间 (JSR-310) 类型与 Spring Data MongoDB 的映射

更新时间:2023-01-17 08:31:28

我不知道这是否是***的方法,但我在 Spring Data MongoDB 中添加了 Java 8 Date/Time (JSR-310) 类型支持 1.5.0.RELEASE 像这样:

I don't know if this is the best way but I added Java 8 Date/Time (JSR-310) types support to Spring Data MongoDB 1.5.0.RELEASE like this:

  1. 第一步.添加简单的 Spring Converters

public class InstantToLongConverter implements Converter<Instant, Long> {
    @Override
    public Long convert(Instant instant) {
        return instant.toEpochMilli();
    }
}

public class LongToInstantConverter implements Converter<Long, Instant> {
    @Override
    public Instant convert(Long source) {
        return Instant.ofEpochMilli(source);
    }
}

public class LocalDateToStringConverter implements Converter<LocalDate, String> {
    @Override
    public String convert(LocalDate localDate) {
        return localDate.toString();
    }
}

public class StringToLocalDateConverter implements Converter<String, LocalDate> {
    @Override
    public LocalDate convert(String source) {
        return LocalDate.parse(source);
    }
}

  • 第二步.在 AbstractMongoConfiguration 实现中使用 MappingMongoConverter 注册这些自定义 Converter,如下所示:

  • Second step. Register these custom Converters with MappingMongoConverter in your AbstractMongoConfiguration implementation like this:

    @Configuration
    @EnableMongoRepositories(basePackages = {"my.app.repository"})
    public class MongoConfiguration extends AbstractMongoConfiguration {
    
        ...
    
        @Override
        public CustomConversions customConversions() {
            return new CustomConversions(Arrays.asList(
                    new InstantToLongConverter(), new LongToInstantConverter(),
                    new LocalDateToStringConverter(), new StringToLocalDateConverter()));
        }
    }
    

  • 现在您的文档的 Instant 字段将作为长值和 LocalDates 作为字符串持久化.

    Now your document's Instant fields will be persisted as long values and LocalDates as Strings.