2

我有一个实体,它将与 Spring Data 一起保存到 Mongo 数据库:

@Document
public class MyEntity {

    @Id
    private String id;

    @QueryType(PropertyType.DATETIME)
    private DateTime lastUpdate;

}

这是我的存储库:

public interface MyEntityRepository extends
    MongoRepository<MyEntity, String>,
    QueryDslPredicateExecutor<MyEntity> {}

以及我的 pom.xml 中用于 QueryDSL 生成的插件

            <plugin>
            <groupId>com.mysema.maven</groupId>
            <artifactId>apt-maven-plugin</artifactId>
            <version>1.0.8</version>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>target/generated-sources</outputDirectory>
                        <processor>org.springframework.data.mongodb.repository.support.MongoAnnotationProcessor</processor>
                    </configuration>
                </execution>
            </executions>
        </plugin>

尽管如此,它将 DateTime 视为常规实体(我尝试过使用和不使用 QueryType)。我希望它被视为日期,所以我可以进行比较,因为现在我不能:

Predicate predicate = QMyEntity.myentity.lastUpdate... // where are the lessThan or greaterThan methods?

当然,如果可能的话,我想坚持使用 JodaTime,而不是回退到 Java Date,或者将日期存储为毫秒。

4

2 回答 2

3

如果您使用的是最新版本的 Spring Data MongoDB(在撰写本文时为 1.2.0.RELEASE),如果您在类路径中有库(请参阅相应的票证Converter,则应注册 JodaTime 类型的必要实现。

如果您必须使用它的旧版本,您需要手动编写和注册这些转换器,如参考文档中所述。

于 2013-03-14T18:40:04.647 回答
1

org.joda.time.DateTimeQuerydsl 通常会将其视为 DateTime 类型,因此一些额外的标志使 Querydsl 将其视为实体类型。

例如,该额外标志可能是 DateTime 类型的属性在某处由@Embeddedor注释@Embeddable

如果这不能解决问题,请在 GitHub 上为 Querydsl 打开一张票。

于 2013-03-15T07:21:11.420 回答