Explicaré cómo se manejan los campos variables con un ejemplo. El siguiente Game.java
La clase POJO representa la asignación de objetos al game
documento de cobro.
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
}
}
Para las Actions
class necesita proporcionar a los constructores las posibles combinaciones. Usa el constructor apropiado con id
, type
, etc. Por ejemplo, crea un Game
objeto y guardar en la base de datos:
Game.Actions actions= new Game.Actions(new Integer(1000));
Game g1 = new Game("G-1", Arrays.asList(actions));
repo.save(g1);
Esto se almacena en la colección de base de datos game
de la siguiente manera (consultado de mongo
cáscara):
{
"_id" : ObjectId("5eeafe2043f875621d1e447b"),
"name" : "G-1",
"actions" : [
{
"_id" : 1000
}
],
"_class" : "com.example.demo.Game"
}
Tenga en cuenta las actions
formación. Como habíamos almacenado solo el id
campo en el Game.Actions
objeto, sólo se almacena ese campo. Aunque especifique todos los campos en la clase, solo se conservan aquellos proporcionados con valores.
Estos son dos documentos más con Game.Actions
creado con type
solo y id + type
usando los constructores apropiados:
{
"_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"
}