/** * Create ITidePersistenceManager for a PersistenceController * * @param component * @param controller * @return a ITidePersistenceManager. */ public static TidePersistenceManager createTidePersistence( Component component, PersistenceController<?> controller) { TidePersistenceManager pm = TidePersistenceFactory.createTidePersistence(component, controller); if (pm != null) return pm; String controllerName = component.getName(); if (controller.getPersistenceContext() instanceof Session) return new HibernatePersistenceControllerManager(controllerName); return null; }
/** * Attach the passed in entity with the EntityManager stored in the EntityHome object. * * @param entity * @return the attached hibernate object */ @Override public Object fetchEntity(Object entity, String[] fetch) { PersistenceController<?> controller = (PersistenceController<?>) Component.getInstance(controllerName); EntityManager em = (EntityManager) controller.getPersistenceContext(); Serializable id = (Serializable) Entity.forClass(entity.getClass()).getIdentifier(entity); if (id == null) return null; if (fetch == null || em.getDelegate().getClass().getName().indexOf(".hibernate.") < 0) return em.find(entity.getClass(), id); for (String f : fetch) { Query q = em.createQuery( "select e from " + entity.getClass().getName() + " e left join fetch e." + f + " where e = :entity"); q.setParameter("entity", entity); entity = q.getSingleResult(); } return entity; }