/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.datastore.neo4j.test.mapping; import static org.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel.EMBEDDED; import static org.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel.ENTITY; import static org.hibernate.ogm.datastore.neo4j.test.dsl.GraphAssertions.node; import javax.persistence.EntityManager; import org.hibernate.ogm.backendtck.associations.collection.types.Address; import org.hibernate.ogm.backendtck.associations.collection.types.PhoneNumber; import org.hibernate.ogm.backendtck.associations.collection.types.User; import org.hibernate.ogm.datastore.neo4j.test.dsl.NodeForGraphAssertions; import org.hibernate.ogm.datastore.neo4j.test.dsl.RelationshipsChainForGraphAssertions; import org.junit.Before; import org.junit.Test; /** * @author Davide D'Alto */ public class MapTest extends Neo4jJpaTestCase { private User user; private Address home; private Address work; @Before public void prepareDb() throws Exception { final EntityManager em = getFactory().createEntityManager(); em.getTransaction().begin(); home = new Address(); home.setCity( "Paris" ); work = new Address(); work.setCity( "San Francisco" ); user = new User(); user.getAddresses().put( "home", home ); user.getAddresses().put( "work", work ); user.getNicknames().add( "idrA" ); user.getNicknames().add( "day[9]" ); em.persist( home ); em.persist( work ); em.persist( user ); em.getTransaction().commit(); em.close(); } @Test public void testMapping() throws Exception { NodeForGraphAssertions userNode = node( "user", User.class.getSimpleName(), ENTITY.name() ) .property( "id", user.getId() ); NodeForGraphAssertions homeNode = node( "home", Address.class.getSimpleName(), ENTITY.name() ) .property( "id", home.getId() ) .property( "city", home.getCity() ); NodeForGraphAssertions workNode = node( "work", Address.class.getSimpleName(), ENTITY.name() ) .property( "id", work.getId() ) .property( "city", work.getCity() ); NodeForGraphAssertions nickNode1 = node( "nick1", "Nicks", EMBEDDED.name() ) .property( "nicknames", "idrA" ); NodeForGraphAssertions nickNode2 = node( "nick2", "Nicks", EMBEDDED.name() ) .property( "nicknames", "day[9]" ); assertThatOnlyTheseNodesExist( userNode , homeNode , workNode , nickNode1 , nickNode2 ); RelationshipsChainForGraphAssertions relationship1 = userNode.relationshipTo( nickNode1, "nicknames" ); RelationshipsChainForGraphAssertions relationship2 = userNode.relationshipTo( nickNode2, "nicknames" ); RelationshipsChainForGraphAssertions relationship3 = userNode.relationshipTo( homeNode, "addresses" ).property( "addressType", "home" ); RelationshipsChainForGraphAssertions relationship4 = userNode.relationshipTo( workNode, "addresses" ).property( "addressType", "work" ); assertThatOnlyTheseRelationshipsExist( relationship1 , relationship2 , relationship3 , relationship4 ); } @Override public Class<?>[] getAnnotatedClasses() { return new Class<?>[] { User.class, Address.class, PhoneNumber.class }; } }