У меня есть вопрос, касающийся драйвера 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);
У кого-нибудь есть идеи, как решить эту проблему?
Действительно признателен за вашу помощь!
Спасибомного!
Примечание: фрагмент кодаВыше приведены лишь короткие примеры того, как выглядит мой код.Это не полный код, который я использую, поэтому в нем могут быть синтаксические ошибки.