/*
* 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.utils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
/**
* Utility methods to simplify CRUD operations on groups of entities.
*
* @author Davide D'Alto
*/
public class SessionHelper {
public static void persist(SessionFactory sessions, Object... entities) {
final Session session = sessions.openSession();
persist( session, entities );
}
public static void persist(Session session, Object... entities) {
Transaction transaction = session.beginTransaction();
for ( Object entity : entities ) {
session.persist( entity );
}
transaction.commit();
session.close();
}
public static void delete(SessionFactory sessions, Class<?> entityClass, Serializable... ids) {
final Session session = sessions.openSession();
Transaction transaction = session.beginTransaction();
for ( Serializable id : ids ) {
session.delete( session.load( entityClass, id ) );
}
transaction.commit();
session.close();
}
public static List<ProjectionResult> asProjectionResults(Session session, String projectionQuery) {
List<?> results = session.createQuery( projectionQuery ).list();
List<ProjectionResult> projectionResults = new ArrayList<ProjectionResult>();
for ( Object result : results ) {
if ( !( result instanceof Object[] ) ) {
throw new IllegalArgumentException( "No projection result: " + result );
}
projectionResults.add( ProjectionResult.forArray( (Object[]) result ) );
}
return projectionResults;
}
public static class ProjectionResult {
private Object[] elements;
public ProjectionResult(Object... elements) {
this.elements = elements;
}
public static ProjectionResult forArray(Object[] element) {
ProjectionResult result = new ProjectionResult();
result.elements = element;
return result;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Arrays.hashCode( elements );
return result;
}
@Override
public boolean equals(Object obj) {
if ( this == obj ) {
return true;
}
if ( obj == null ) {
return false;
}
if ( getClass() != obj.getClass() ) {
return false;
}
ProjectionResult other = (ProjectionResult) obj;
if ( !Arrays.equals( elements, other.elements ) ) {
return false;
}
return true;
}
@Override
public String toString() {
return Arrays.deepToString( elements );
}
}
}