use of org.neo4j.ogm.domain.gh640.MyNode in project neo4j-ogm by neo4j.
the class RelationshipMappingTest method shouldDealWithTheSameButNotEqualParentEntities.
// GH-640
@Test
public void shouldDealWithTheSameButNotEqualParentEntities() {
Session tx = sessionFactory.openSession();
Map<String, Object> result = tx.query("CREATE (n1:MyNode {name: 'node1'})\n" + "CREATE (n2:MyNode {name: 'node2'})\n" + "CREATE (n3:MyNode {name: 'node3'})\n" + "CREATE (n1) - [:REL_TWO] -> (n2)\n" + "CREATE (n2) - [:REL_ONE] -> (n1)\n" + "RETURN id(n1) as idOfn1, id(n2) as idOfn2, id(n3) as idOfn3", emptyMap()).iterator().next();
// Lets flush the session and thus basically creating a new tx, at least as far as the cache is concerned
tx = sessionFactory.openSession();
// Let's go through a bunch of queries to make sure the associations are loaded as OGM would do by default…
MyNode node1 = tx.load(MyNode.class, (Long) result.get("idOfn1"));
MyNode node2 = tx.load(MyNode.class, (Long) result.get("idOfn2"));
MyNode node3 = tx.load(MyNode.class, (Long) result.get("idOfn3"));
// Let's check some preconditions, shall we?
assertThat(node1).isNotNull();
assertThat(node2).isNotNull();
assertThat(node3).isNotNull();
assertThat(node1.getRefOne()).isEqualTo(node2);
assertThat(node1.getRefTwo()).containsOnly(node2);
// We start a new tx, but keep working on the copy of the previously loaded node
tx = sessionFactory.openSession();
MyNode changed = tx.load(MyNode.class, node1.getId()).copy();
changed.setName("Dirty thing.");
changed.setRefOne(node3);
tx.save(changed);
// Again, verify in a new session.
tx = sessionFactory.openSession();
node1 = tx.load(MyNode.class, changed.getId());
assertThat(node1.getRefOne()).isEqualTo(node3);
assertThat(node1.getRefTwo()).containsOnly(node2);
// Better safe than sorry.
session.clear();
assertThat(session.query("MATCH (n1:MyNode {name: 'Dirty thing.'}), " + "(n2:MyNode {name: 'node2'}), " + "(n3:MyNode {name: 'node3'}) " + "WHERE (n1) - [:REL_TWO] -> (n2)" + "and (n3) - [:REL_ONE] -> (n1) return n1, n2, n3", emptyMap()).queryResults()).hasSize(1);
}
use of org.neo4j.ogm.domain.gh640.MyNode in project neo4j-ogm by neo4j.
the class SingleUseEntityMapperTest method shouldMapEnumeratedMapProperties.
// GH-873
@Test
public void shouldMapEnumeratedMapProperties() {
SingleUseEntityMapper entityMapper = new SingleUseEntityMapper(sessionFactory.metaData(), new ReflectionEntityInstantiator(sessionFactory.metaData()));
Iterable<Map<String, Object>> results = sessionFactory.openSession().query("MATCH (t:MyNode) RETURN t.id AS id, t.type AS type, t.`attributes.a1` AS `attributes.a1`, t.`attributes.a2` AS `attributes.a2` LIMIT 1", EMPTY_MAP).queryResults();
assertThat(results).hasSize(1);
MyNode thingResult = entityMapper.map(MyNode.class, results.iterator().next());
assertThat(thingResult.getId()).isEqualTo("the-id");
assertThat(thingResult.getType()).isEqualTo("the-type");
assertThat(thingResult.getAttributes()).containsEntry("a1", "v1");
assertThat(thingResult.getAttributes()).containsEntry("a2", "v2");
}
Aggregations