J'étudie Neo4j et ai une question en ce qui concerne l'objet désireux/chargement paresseux. Disons que j'ai classe Trolley avec Set<Item>
(avec getters/setters). Si je fais ce qui suit:Neo4j désireux/chargement paresseux avec des données de printemps
Trolley t = new Trolley(...); // create empty trolley
t.addItem(f); // add one item to the trolley
t.persist(); // persist the object
je puis trouver plus tard le chariot sur la base nodeId:
repo.findOne(xxx); // returns the trolley successfully
Quand je fais quelque chose comme:
trolley.getItems().size()
c'est vide. Je suppose que c'est le comportement prévu. Existe-t-il un mécanisme similaire à JPA où la session/tx est ouverte pour charger dynamiquement la collection.
code:
@NodeEntity
public class Trolley
{
@Indexed
private String name;
@RelatedTo
private Set<Item> items;
public Trolley(){}
public Trolley(String name)
{
this.name = name;
}
public void addItem(Item item)
{
this.items.add(item);
}
public Set<Item> getItems()
{
return items;
}
}
@NodeEntity
public class Item
{
private String name;
public Item(){}
public Item(String name)
{
this.name = name;
}
public String getName()
{
return name;
}
}
@Test
public void trolleyWithItemPersist()
{
Trolley trolley = new Trolley("trolley1").persist();
// Persisting - however I would've expected a cascade to
// occur when adding to the collection.
Item item = new Item("item1").persist();
// now add to the trolley
trolley.addItem(item);
// persist
trolley.persist();
// Now use repo to get trolley
Trolley loadedTrolley = trolleyRepository.findOne(trolley.getNodeId());
// should have one item
assertEquals(1, loadedTrolley.getItems().size());
}
Est-ce que f est aussi un NodeEntity? Il pourrait être nécessaire que vous persistiez celui-là en premier. Normalement, cela devrait fonctionner en cascade, mais cela pourrait être un casse-tête. Pouvez-vous afficher les définitions de classe de Trolley et "f"? Merci –
f est en effet une NodeEntity. J'ai essayé de persister en premier, mais le résultat net est le même. c'est-à-dire f.persist() puis ajout à la collection. Je suppose que je pourrais essayer @RelationshipEntity? Je vais coller les définitions et un test simple. – imamc
Salut Michael, je pense que tu avais raison, le problème était de persister d'abord puis de l'ajouter à la collection. Je m'attendais à ce qu'une cascade se produise pour reconnaître que l'élément ajouté a les méta-données appropriées pour montrer qu'il s'agit également d'un nœud. Le test de fonctionnement est montré ci-dessus, ne faisant pas la persistance sur Item item = new Item ("item1"). Persist(); provoquera l'échec du test. – imamc