diff options
Diffstat (limited to 'hibernate/org.eclipse.emf.teneo.hibernate/src/org/eclipse/emf/teneo/hibernate/HbSessionWrapper.java')
-rwxr-xr-x | hibernate/org.eclipse.emf.teneo.hibernate/src/org/eclipse/emf/teneo/hibernate/HbSessionWrapper.java | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/hibernate/org.eclipse.emf.teneo.hibernate/src/org/eclipse/emf/teneo/hibernate/HbSessionWrapper.java b/hibernate/org.eclipse.emf.teneo.hibernate/src/org/eclipse/emf/teneo/hibernate/HbSessionWrapper.java new file mode 100755 index 000000000..59373dcb7 --- /dev/null +++ b/hibernate/org.eclipse.emf.teneo.hibernate/src/org/eclipse/emf/teneo/hibernate/HbSessionWrapper.java @@ -0,0 +1,224 @@ +/** + * <copyright> + * + * Copyright (c) 2005, 2006, 2007, 2008 Springsite BV (The Netherlands) and others + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Martin Taal + * Benjamin Cabe + * </copyright> + * + * $Id: HbSessionWrapper.java,v 1.12 2010/11/12 09:33:33 mtaal Exp $ + */ + +package org.eclipse.emf.teneo.hibernate; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +import org.eclipse.emf.teneo.annotations.pannotation.InheritanceType; +import org.hibernate.FlushMode; +import org.hibernate.LockOptions; +import org.hibernate.Query; +import org.hibernate.Session; +import org.hibernate.impl.SessionImpl; +import org.hibernate.metadata.ClassMetadata; +import org.hibernate.persister.entity.JoinedSubclassEntityPersister; +import org.hibernate.persister.entity.SingleTableEntityPersister; +import org.hibernate.persister.entity.UnionSubclassEntityPersister; + +/** + * Wraps a standard hibernate session. + * + * @author <a href="mailto:mtaal@elver.org">Martin Taal</a> + * @version $Revision: 1.12 $ + */ +public class HbSessionWrapper implements SessionWrapper { + + /** The hibernate session */ + private Session session = null; + + /** The datastore which created me */ + private final HbDataStore hbDataStore; + + private FlushMode flushMode; + + /** Constructor */ + public HbSessionWrapper(HbDataStore hbDataStore) { + this.hbDataStore = hbDataStore; + } + + /** Set the session in the constructor */ + public HbSessionWrapper(HbDataStore hbDataStore, Session session) { + this.hbDataStore = hbDataStore; + this.session = session; + } + + /** + * Return the session, return is an object to support both session as well + * as entitymanager. + */ + public Object getSession() { + if (session == null) { + session = hbDataStore.getSessionFactory().openSession(); + } + return session; + } + + /** Convenience which casts */ + private Session getSessionInternal() { + return (Session) getSession(); + } + + /** Begin a transaction */ + public void beginTransaction() { + getSessionInternal().beginTransaction(); + } + + /** Commit a transaction */ + public void commitTransaction() { + getSessionInternal().getTransaction().commit(); + } + + /** Rollback transaction */ + public void rollbackTransaction() { + getSessionInternal().getTransaction().rollback(); + } + + /** Return an object using the entityname and a serializable id */ + public Object get(String entityName, Serializable id) { + return getSessionInternal().get(entityName, id); + } + + /** Query */ + public List<?> executeQuery(String qry) { + final Query query = getSessionInternal().createQuery(qry); + return query.list(); + } + + /** Query */ + public List<?> executeQuery(String qry, String entityParameter, + Object entity) { + final Query query = getSessionInternal().createQuery(qry); + query.setEntity(entityParameter, entity); + return query.list(); + } + + /** Query */ + public List<?> executeQuery(String qry, List<Object> parameters) { + final Query query = getSessionInternal().createQuery(qry); + int pos = 0; + for (Object obj : parameters) { + query.setParameter(pos++, obj); + } + return query.list(); + } + + /** Query */ + public List<?> executeQuery(String qry, boolean cacheable) { + final Query query = getSessionInternal().createQuery(qry); + query.setCacheable(cacheable); + return query.list(); + } + + /** Query with named parameters */ + public List<?> executeQuery(String qry, Map<String, Object> namedParameters) { + final Query query = getSessionInternal().createQuery(qry); + for (Map.Entry<String, Object> entry : namedParameters.entrySet()) { + query.setParameter(entry.getKey(), entry.getValue()); + } + return query.list(); + } + + /** Does this impl. wrap an entitymanager */ + public boolean isEJB3EntityManager() { + return false; + } + + public void restorePreviousFlushMode() { + if (flushMode != null) { + getSessionInternal().setFlushMode(flushMode); + flushMode = null; + } + } + + /** Set the flushmode */ + public void setFlushModeManual() { + flushMode = getSessionInternal().getFlushMode(); + getSessionInternal().setFlushMode(FlushMode.MANUAL); + } + + /** Close the underlying session */ + public void close() { + getSessionInternal().close(); + } + + /** Save or update the pass object */ + public void saveOrUpdate(Object obj) { + getSessionInternal().saveOrUpdate(obj); + } + + /** Delete the object */ + public void delete(Object obj) { + getSessionInternal().delete(obj); + } + + /** Flush the session */ + public void flush() { + getSessionInternal().flush(); + } + + /** Is transaction active */ + public boolean isTransactionActive() { + return ((SessionImpl) getSessionInternal()).isTransactionInProgress(); + } + + /** Refresh the object */ + public void refresh(Object obj) { + getSessionInternal().refresh(obj, LockOptions.NONE); + } + + /** Check if a certain class is mapped using a certain inheritance strategy */ + public boolean isInheritanceStrategy(Class<?> cls, InheritanceType strategy) { + final String clsName = cls.getName(); + final String realName = clsName.substring(clsName.lastIndexOf('.') + 1, + clsName.length() - 4); + final ClassMetadata cmd = hbDataStore.getSessionFactory() + .getClassMetadata(realName); + if (strategy.equals(InheritanceType.SINGLE_TABLE)) { + return cmd instanceof SingleTableEntityPersister; + } + if (strategy.equals(InheritanceType.JOINED)) { + return cmd instanceof JoinedSubclassEntityPersister; + } + if (strategy.equals(InheritanceType.TABLE_PER_CLASS)) { + return cmd instanceof UnionSubclassEntityPersister; + } + throw new HbStoreException("Strategy: " + strategy.toString() + + " not supported "); + } + + /** Clear the session */ + public void clear() { + getSessionInternal().clear(); + } + + /** Merge with the datastore */ + public Object merge(Object obj) { + return getSessionInternal().merge(obj); + } + + public void persist(Object obj) { + getSessionInternal().save(obj); + } + + public Session getHibernateSession() { + return getSessionInternal(); + } + +}
\ No newline at end of file |