3

LocalDateTime フィールドを持つエンティティをデータストアに保存できます。ただし、LocalDateTime フィールドを持つエンティティに対してクエリを実行しようとしています。クエリを作成して asList メソッドを呼び出すと、以下の例外がスローされます。

java.lang.RuntimeException: org.mongodb.morphia.mapping.MappingException: No usable constructor for java.time.LocalDateTime
4

2 に答える 2

1

java.time.LocalDateTime クラスには例外がスローされるコンストラクターがないため、MongoDB から Java オブジェクトにエンティティーをマップするとき、Morphia はデフォルトのコンストラクターに依存します。

@PreLoad ライフサイクル アノテーションを使用して、次のようにデータを変換できます。

@Entity
public class MyEntity {
    public MyEntity() {

    }

    @Id
    private ObjectId id;
    private LocalDateTime localDateTime;

    @PreLoad
    public void preLoad(DBObject obj) {
        BasicDBObject object = (BasicDBObject) obj.get("localDateTime");
        BasicDBObject date = (BasicDBObject) object.get("date");
        BasicDBObject time = (BasicDBObject) object.get("time");
        localDateTime = LocalDateTime.of(date.getInt("year"),
                                         date.getInt("month"),
                                         date.getInt("day"),
                                         time.getInt("hour"),
                                         time.getInt("minute"),
                                         time.getInt("second"),
                                         time.getInt("nano"));
        obj.removeField("localDateTime");
    }
}
于 2016-07-22T15:07:50.523 に答える
0

現在、Morphia では Java 8 の日付/時刻型はサポートされていません。現在コード レビュー中の新しいモジュールがあり、1.3 リリースでこのサポートが追加されることを願っています。

于 2016-07-25T14:23:28.157 に答える