Je vais vous expliquer comment différents champs sont traités avec un exemple. Le Game.java
suivant La classe POJO représente le mappage d'objet au game
dossier de collecte.
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
}
}
Pour les Actions
classe, vous devez fournir aux constructeurs les combinaisons possibles. Utilisez le constructeur approprié avec id
, type
, etc. Par exemple, créez un Game
objet et enregistrer dans la base de données :
Game.Actions actions= new Game.Actions(new Integer(1000));
Game g1 = new Game("G-1", Arrays.asList(actions));
repo.save(g1);
Ceci est stocké dans la collection de base de données game
comme suit (interrogé à partir de mongo
coque):
{
"_id" : ObjectId("5eeafe2043f875621d1e447b"),
"name" : "G-1",
"actions" : [
{
"_id" : 1000
}
],
"_class" : "com.example.demo.Game"
}
Notez les actions
déployer. Comme nous n'avions stocké que l'id
champ dans le Game.Actions
objet, seul ce champ est stocké. Même si vous spécifiez tous les champs de la classe, seuls ceux fournis avec des valeurs sont conservés.
Ce sont deux autres documents avec Game.Actions
créé avec type
uniquement et id + type
en utilisant les constructeurs appropriés :
{
"_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"
}