private static PassivatedEntity create(Class entityClass, String persistenceContextName, Object id, Object version) { if (id==null) { //this can happen if persist() fails in Hibernate return null; } else { return new PassivatedEntity(id, version, entityClass, persistenceContextName); } }
private static PassivatedEntity createPassivatedEntity(Object value, Class entityClass, String persistenceContextName, Object persistenceContext) { if (persistenceContext instanceof EntityManager) { return createUsingEntityManager(value, entityClass, persistenceContextName, persistenceContext); } else { return createUsingHibernate(value, entityClass, persistenceContextName, persistenceContext); } }
public Object toEntityReference(boolean checkVersion) { Object persistenceContext = Component.getInstance( getPersistenceContext() ); if ( persistenceContext==null ) { return null; } else { if (persistenceContext instanceof EntityManager) { return getEntityFromEntityManager(persistenceContext, checkVersion); } else { return getEntityFromHibernate(persistenceContext, checkVersion); } } }
private Object getEntityFromEntityManager(Object persistenceContext, boolean checkVersion) { EntityManager em = (EntityManager) persistenceContext; if ( em.isOpen() ) { Object result = em.getReference( getEntityClass(), getId() ); if (result!=null && checkVersion) { checkVersion(em, result); } return result; } else { return null; } }
private static PassivatedEntity createUsingHibernate(Object value, Class entityClass, String persistenceContextName, Object persistenceContext) { //TODO: split this out to somewhere to isolate the Hibernate dependency!! Session session = (Session) persistenceContext; if ( isManaged(value, session) ) { Object id = session.getIdentifier(value); Object version = HibernatePersistenceProvider.getVersion(value, session); return create(entityClass, persistenceContextName, id, version); } else { return null; } }
public static PassivatedEntity passivateEntity(Object value) { Class entityClass = Seam.getEntityClass( value.getClass() ); if (entityClass!=null) { for ( String persistenceContextName: PersistenceContexts.instance().getTouchedContexts() ) { Object persistenceContext = Component.getInstance(persistenceContextName); return createPassivatedEntity(value, entityClass, persistenceContextName, persistenceContext); } } return null; }
private Object getEntityFromHibernate(Object persistenceContext, boolean checkVersion) { //TODO: split this out to somewhere to isolate the Hibernate dependency!! Session session = (Session) persistenceContext; if ( session.isOpen() ) { Object result = session.load( getEntityClass(), (Serializable) getId() ); if (result!=null && checkVersion) { checkVersion(session, result); } return result; } else { return null; } }
private static PassivatedEntity createUsingEntityManager(Object value, Class entityClass, String persistenceContextName, Object persistenceContext) { EntityManager em = (EntityManager) persistenceContext; if ( isManaged(value, em) ) { Object id = PersistenceProvider.instance().getId(value, em); Object version = PersistenceProvider.instance().getVersion(value, em); return create(entityClass, persistenceContextName, id, version); } else { return null; } }