/*
* 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.mongodb.test.mapping.associations;
import static org.hibernate.ogm.datastore.mongodb.utils.MongoDBTestHelper.assertDocument;
import java.io.Serializable;
import org.hibernate.Transaction;
import org.hibernate.ogm.OgmSession;
import org.hibernate.ogm.utils.OgmTestCase;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* @author Davide D'Alto
*/
public class MultipleInverseAssociationOnTheSameEntityTest extends OgmTestCase {
@Before
public void setUpTestData() {
try ( OgmSession session = openSession() ) {
Transaction transaction = session.beginTransaction();
Node root = new Node( "root" );
Node child1 = new Node( "child1" );
Node child2 = new Node( "child2" );
NodeLink link1 = new NodeLink( "nl1" );
link1.setSource( root );
link1.setTarget( child1 );
NodeLink link2 = new NodeLink( "nl2" );
link2.setSource( root );
link2.setTarget( child2 );
root.getChildren().add( link1 );
root.getChildren().add( link2 );
session.persist( root );
session.persist( child1 );
session.persist( child2 );
session.persist( link1 );
session.persist( link2 );
transaction.commit();
session.clear();
}
}
@After
public void removeTestData() {
delete( NodeLink.class, "nl1", "nl2" );
delete( Node.class, "root", "child1", "child2" );
}
private void delete(Class<?> entityType, Serializable... ids) {
try ( OgmSession session = openSession() ) {
Transaction transaction = session.beginTransaction();
for ( Serializable id : ids ) {
session.delete( session.load( entityType, id ) );
}
transaction.commit();
}
}
@Test
public void booleanMapping() {
try ( OgmSession session = openSession() ) {
Transaction transaction = session.beginTransaction();
assertDocument(
session.getSessionFactory(),
// collection
"Node",
// query
"{ '_id' : 'root' }",
// fields
null,
// expected
"{ " +
"'_id' : 'root', " +
"'children' : [ 'nl1', 'nl2' ]" +
"}"
);
assertDocument(
session.getSessionFactory(),
// collection
"Node",
// query
"{ '_id' : 'child1' }",
// fields
null,
// expected
"{ " +
"'_id' : 'child1', " +
"}"
);
assertDocument(
session.getSessionFactory(),
// collection
"Node",
// query
"{ '_id' : 'child2' }",
// fields
null,
// expected
"{ " +
"'_id' : 'child2', " +
"}"
);
assertDocument(
session.getSessionFactory(),
// collection
"NodeLink",
// query
"{ '_id' : 'nl1' }",
// fields
null,
// expected
"{ " +
"'_id' : 'nl1', " +
"'source_name' : 'root', " +
"'target_name' : 'child1', " +
"}"
);
assertDocument(
session.getSessionFactory(),
// collection
"NodeLink",
// query
"{ '_id' : 'nl2' }",
// fields
null,
// expected
"{ " +
"'_id' : 'nl2', " +
"'source_name' : 'root', " +
"'target_name' : 'child2', " +
"}"
);
transaction.commit();
}
}
@Override
protected Class<?>[] getAnnotatedClasses() {
return new Class<?>[]{ Node.class, NodeLink.class };
}
}