2

SpringDataを使用してMongoデータベースに永続化されるエンティティがあります。

@Document
public class MyEntity {

    @Id
    private String id;

    @QueryType(PropertyType.DATETIME)
    private DateTime lastUpdate;

}

これは私のリポジトリです:

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

そして、QueryDSL生成のための私のpom.xmlのプラグイン

            <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?

もちろん、可能であれば、Java Dateにフォールバックしたり、日付をミリ秒として保存したりするのではなく、JodaTimeに固執したいと思います。

4

2 に答える 2

3

最新バージョンのSpringDataMongoDB(執筆時点では1.2.0.RELEASE)を使用しているConverter場合、クラスパスにライブラリがある場合は、JodaTimeタイプに必要な実装を登録する必要があります(該当するチケットを参照)。

古いバージョンを使用する必要がある場合は、リファレンスドキュメントで説明されているように、これらのコンバーターを手動で作成して登録する必要があります。

于 2013-03-14T18:40:04.647 に答える
1

org.joda.time.DateTime通常は Querydsl によって DateTime 型として扱われるため、追加のフラグを使用して Querydsl をエンティティ型として扱うようにします。

その追加のフラグは、たとえば、DateTime 型のプロパティがどこかに@Embeddedorで注釈されていること@Embeddableです。

これで解決しない場合は、GitHub で Querydsl のチケットを開いてください。

于 2013-03-15T07:21:11.420 に答える