Anhand eines Beispiels erkläre ich, wie mit unterschiedlichen Feldern umgegangen wird. Die folgende Game.java
Die POJO-Klasse repräsentiert die Objektzuordnung zum game
Sammlung Dokument.
public class Game {
String name;
List<Actions> actions;
public Game(String name, List<Actions> actions) {
this.name = name;
this.actions = actions;
}
public String getName() {
return name;
}
public List<Actions> getActions() {
return actions;
}
// other get/set methods, override, etc..
public static class Actions {
Integer id;
String type;
public Actions() {
}
public Actions(Integer id) {
this.id = id;
}
public Actions(Integer id, String type) {
this.id = id;
this.type = type;
}
public Integer getId() {
return id;
}
public String getType() {
return type;
}
// other methods
}
}
Für die Actions
Klasse müssen Sie Konstruktoren die möglichen Kombinationen bereitstellen. Verwenden Sie den entsprechenden Konstruktor mit id
, type
usw. Erstellen Sie beispielsweise ein game
Objekt und in der Datenbank speichern:
Game.Actions actions= new Game.Actions(new Integer(1000));
Game g1 = new Game("G-1", Arrays.asList(actions));
repo.save(g1);
Diese wird in der Datenbanksammlung game
gespeichert wie folgt (abgefragt von mongo
Schale):
{
"_id" : ObjectId("5eeafe2043f875621d1e447b"),
"name" : "G-1",
"actions" : [
{
"_id" : 1000
}
],
"_class" : "com.example.demo.Game"
}
Beachten Sie die Actions
Reihe. Da wir nur die id
gespeichert hatten Feld in Game.Actions
Objekt, wird nur dieses Feld gespeichert. Obwohl Sie alle Felder in der Klasse angeben, werden nur die mit Werten versehenen beibehalten.
Dies sind zwei weitere Dokumente mit Game.Actions
erstellt mit type
nur und id + type
mit den entsprechenden Konstruktoren:
{
"_id" : ObjectId("5eeb02fe5b86147de7dd7484"),
"name" : "G-9",
"actions" : [
{
"type" : "type-x"
}
],
"_class" : "com.example.demo.Game"
}
{
"_id" : ObjectId("5eeb034d70a4b6360d5398cc"),
"name" : "G-11",
"actions" : [
{
"_id" : 2,
"type" : "type-y"
}
],
"_class" : "com.example.demo.Game"
}