MongoDB POJO и внутренние / вложенные классы - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть вопрос, касающийся драйвера MongoDB Java и POJO / сериализации.Я хотел бы создать свои классы Java, так как они представлены в коллекции MongoDB, а затем использовать (новую) функцию POJO в MongoDB для извлечения данных.См .: http://mongodb.github.io/mongo-java-driver/3.8/driver-async/getting-started/quick-start-pojo/ и http://mongodb.github.io/mongo-java-driver/3.8/bson/pojos/

Сейчас это работает, только если у меня есть два разных класса, например

User.class

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.bson.codecs.pojo.annotations.BsonId;
import org.bson.codecs.pojo.annotations.BsonProperty;

public class User {
  @BsonId
  @BsonProperty("_id")
  UUID id;
  private List<UserSession> sessions = new ArrayList<>();
}

UserSession.class

import java.time.Instant;

public class UserSession {
  Instant start;
  Instant end;
}

Но поскольку моя коллекция больше похожа на следующую ...

{
  _id: XYZ,
  sessions: {
    {start: XYZ, end: XYZ},
    {start: XYZ, end: XYZ},
    {start: XYZ, end: XYZ}
  }
}

... Я хотел бы иметь класс, который выглядит следующим образом:

User.class

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.time.Instant;
import org.bson.codecs.pojo.annotations.BsonId;
import org.bson.codecs.pojo.annotations.BsonProperty;

public class User {
  @BsonId
  @BsonProperty("_id")
  UUID id;
  private List<Session> sessions = new ArrayList<>();

  public class Session {
    Instant start;
    Instant end;
  }
}

Это имеет смысл, поскольку все уникальные сеансы принадлежат непосредственно пользователю, и, будучи вложенным классом, я мог бы получить доступ к полям родительского объекта User изнутри объекта Session.

Проблема в том, что драйвер Java теперь жалуется на отсутствие пустого конструктора аргументов / аргументов для моего класса Session («По умолчанию все POJO должны включать открытый или защищенный пустой конструктор аргументов без аргументов».).

Мой CodecProvider выглядит следующим образом:

CodecProvider codecProvider = PojoCodecProvider.builder()
    .register(User.class, User.Session.class);

У кого-нибудь есть идеи, как решить эту проблему?

Действительно признателен за вашу помощь!

Спасибомного!

Примечание: фрагмент кодаВыше приведены лишь короткие примеры того, как выглядит мой код.Это не полный код, который я использую, поэтому в нем могут быть синтаксические ошибки.

...