List of usage examples for org.hibernate.persister.entity EntityPersister getClassMetadata
ClassMetadata getClassMetadata();
From source file:com.autobizlogic.abl.data.hibernate.HibPersistentBeanCopy.java
License:Open Source License
/** * Create from a state array./* ww w . j a v a 2s .c o m*/ * @param The state (typically from a Hibernate event) * @param pk The primary key * @param persister The persister for the object */ @SuppressWarnings("unchecked") protected HibPersistentBeanCopy(Object[] state, Object entity, Serializable pk, EntityPersister persister, Session session) { if (entity instanceof Map) map = (Map<String, Object>) entity; else { bean = entity; beanMap = new BeanMap(entity); } this.pk = pk; this.metaEntity = MetaModelFactory.getHibernateMetaModel(persister.getFactory()) .getMetaEntity(persister.getEntityName()); ClassMetadata metadata = persister.getClassMetadata(); String[] propNames = metadata.getPropertyNames(); for (int i = 0; i < propNames.length; i++) { String propName = propNames[i]; if (metaEntity.getMetaProperty(propName).isCollection()) continue; MetaRole metaRole = metaEntity.getMetaRole(propName); if (metaRole == null) { // Not a relationship -- must be an attribute if (state[i] != null) values.put(propName, state[i]); } else if (!metaRole.isCollection()) { // In the case of old values, when we are handed the state, it contains the pk for associations, // and not (as you'd expect) the object itself. So we check whether the value is a real object, // and if it's not, we grab it from the object. if (state[i] == null || session.contains(state[i])) { values.put(propName, state[i]); } else { // We have a pk instead of a proxy -- ask Hibernate to create a proxy for it. String className = metadata.getPropertyType(propName).getReturnedClass().getName(); PersistenceContext persContext = HibernateSessionUtil.getPersistenceContextForSession(session); EntityPersister entityPersister = HibernateSessionUtil.getEntityPersister(session, className, bean); EntityKey entityKey = new EntityKey((Serializable) state[i], entityPersister, session.getEntityMode()); // Has a proxy already been created for this session? Object proxy = persContext.getProxy(entityKey); if (proxy == null) { // There is no proxy anywhere for this object, so ask Hibernate to create one for us proxy = entityPersister.createProxy((Serializable) state[i], (SessionImplementor) session); persContext.getBatchFetchQueue().addBatchLoadableEntityKey(entityKey); persContext.addProxy(entityKey, proxy); } values.put(propName, proxy); } } } }
From source file:de.randi2.core.integration.modelDatabase.hibernate.HibernateMappingTest.java
License:Open Source License
/** * Walking over all mapped entities and getting a list of them to see, * if loading works correct./* www .j a v a 2 s . c o m*/ * * @throws Exception */ @Test public void testEverything() throws Exception { databaseUtil.setUpDatabaseEmpty(); Map metadata = ((Session) entityManager.getDelegate()).getSessionFactory().getAllClassMetadata(); for (Object persisterObject : metadata.values()) { EntityPersister persister = (EntityPersister) persisterObject; String className = persister.getClassMetadata().getEntityName(); String queryString = "from " + className + " c"; List result = entityManager.createQuery(queryString).getResultList(); logger.debug("QUERY: " + queryString); } }
From source file:de.randi2.core.unit.model.hibernate.HibernateMappingTest.java
License:Open Source License
/** * Walking over all mapped entities and getting a list of them to see, * if loading works correct./*www. j av a2 s . c om*/ * * @throws Exception */ @Test public void testEverything() throws Exception { databaseUtil.setUpDatabaseEmpty(); Map metadata = sessionFactory.getAllClassMetadata(); for (Object persisterObject : metadata.values()) { Session session = sessionFactory.openSession(); try { EntityPersister persister = (EntityPersister) persisterObject; String className = persister.getClassMetadata().getEntityName(); String queryString = "from " + className + " c"; List result = session.createQuery(queryString).list(); logger.debug("QUERY: " + queryString); } finally { session.close(); } } }
From source file:org.babyfish.hibernate.internal.SessionImplWrapper.java
License:Open Source License
@SuppressWarnings("unchecked") protected static void delete(XSessionImplementor sessionProxy, Object object) { if (object != null) { SessionFactory sessionFactory = sessionProxy.getRawSessionImpl().getSessionFactory(); PersistenceContext persistenceContext = ((org.hibernate.internal.SessionImpl) sessionProxy .getRawSessionImpl()).getPersistenceContext(); Map<PersistentCollection, CollectionEntry> collectionEntries = persistenceContext .getCollectionEntries(); for (Entry<PersistentCollection, CollectionEntry> entry : collectionEntries.entrySet()) { PersistentCollection persistentCollection = entry.getKey(); if (persistentCollection.wasInitialized()) { CollectionMetadata collectionMetadata = sessionFactory .getCollectionMetadata(persistentCollection.getRole()); Class<?> elementClass = collectionMetadata.getElementType().getReturnedClass(); if (elementClass.isAssignableFrom(object.getClass())) { if (persistentCollection instanceof Map<?, ?>) { ((Map<?, ?>) persistentCollection).values().remove(object); } else if (persistentCollection instanceof Collection<?>) { ((Collection<?>) persistentCollection).remove(object); }//from ww w. j ava 2 s . c om } } } Class<?> clazz = object.getClass(); Collection<HbmReference> hbmReferences = null; NavigableMap<Class<?>, Collection<HbmReference>> hbmReferencesByTargetClass = (NavigableMap<Class<?>, Collection<HbmReference>>) ((XSessionFactoryImplementor) sessionProxy .getFactory()).getInternalData(SessionFactoryImplWrapper.IDK_HBM_REFERENCES_BY_TARGET_CLASS); for (Entry<Class<?>, Collection<HbmReference>> entry : hbmReferencesByTargetClass.descendingMap() .entrySet()) { if (entry.getKey().isAssignableFrom(clazz)) { hbmReferences = entry.getValue(); break; } } if (hbmReferences != null) { EntityReferenceComparator<? super Object> referenceComparator = EntityReferenceComparator .getInstance(); Entry<Object, EntityEntry>[] entityEntries = persistenceContext.reentrantSafeEntityEntries(); if (entityEntries != null) { for (Entry<Object, EntityEntry> entry : entityEntries) { Object entity = entry.getKey(); if (Hibernate.isInitialized(entity)) { EntityPersister persister = entry.getValue().getPersister(); ClassMetadata classMetadata = persister.getClassMetadata(); for (HbmReference hbmReference : hbmReferences) { if (hbmReference.ownerMetadata == classMetadata) { Object expectedObject = persister.getPropertyValue(entity, hbmReference.propertyIndex); if (referenceComparator.same(expectedObject, object)) { persister.setPropertyValue(entity, hbmReference.propertyIndex, null); } } } } } } } } sessionProxy.getRawSessionImpl().delete(object); }
From source file:org.opentaps.foundation.infrastructure.Infrastructure.java
License:Open Source License
/** * Gets the Hibernate <code>SessionFactory</code> object for the corresponding delegator. * A Map of delegatorName to SessionFactory is maintained, and the first time a SessionFactory is requested for. * A delegatorName, it is created in the the following way: * <ul>// w w w.j a v a 2s . co m * <li>First, get the data source for the group helper (ie, "org.ofbiz" in entitygroup.xml) and that delegator</li> * <li>Then, get the hibernate cfg xml for the data source</li> * <li>Finally, use that hibernate cfg xml to create a SessionFactory</li> * </ul> * @param delegatorName a <code>String</code> value * @return a Hibernate <code>SessionFactory</code> value */ @SuppressWarnings({ "rawtypes", "unchecked" }) public static synchronized SessionFactory getSessionFactory(String delegatorName) { SessionFactory sessionFactory = sessionFactories.get(delegatorName); // the sessionFactory haven't init before if (sessionFactory == null) { Debug.logVerbose("building hibernate SessionFactory ...", MODULE); AnnotationConfiguration annotationConfiguration = new AnnotationConfiguration(); Delegator delegator = DelegatorFactory.getDelegator(delegatorName); //for support eccas, construct persist event listener arrays PersistEventListener[] persistEventListeners = { new EcaPersistEventListener(delegator) }; //for support eccas, construct load event listener arrays LoadEventListener[] loadEventListeners = { new EcaLoadEventListener(delegator) }; //for support eccas, construct delete event listener arrays DeleteEventListener[] deleteEventListeners = { new EcaDeleteEventListener(delegator) }; //for support eccas, construct saveOrUpdate event listener arrays SaveOrUpdateEventListener[] saveOrUpdateEventListeners = { new EcaSaveOrUpdateEventListener(delegator) }; //for support eccas, construct saveOrUpdate event listener arrays SaveOrUpdateEventListener[] saveEventListeners = { new EcaSaveEventListener(delegator) }; //register our event listener arrays annotationConfiguration.getEventListeners().setPersistEventListeners(persistEventListeners); annotationConfiguration.getEventListeners().setSaveOrUpdateEventListeners(saveOrUpdateEventListeners); annotationConfiguration.getEventListeners().setDeleteEventListeners(deleteEventListeners); annotationConfiguration.getEventListeners().setLoadEventListeners(loadEventListeners); annotationConfiguration.getEventListeners().setSaveEventListeners(saveEventListeners); annotationConfiguration.getEventListeners().setUpdateEventListeners(saveOrUpdateEventListeners); //get groupHelpName for retrieve database connection information. String groupHelperName = EntityConfigUtil.getDelegatorInfo(delegatorName).groupMap.get(getHelperName()); Debug.logVerbose("groupHelperName : " + groupHelperName, MODULE); //get database source information DatasourceInfo datasourceInfo = EntityConfigUtil.getDatasourceInfo(groupHelperName); Debug.logVerbose("datasourceInfo.fieldTypeName : " + datasourceInfo.fieldTypeName, MODULE); //get hibernate dialect by database type String dialect = DIALECTS.get(datasourceInfo.fieldTypeName); if (dialect.length() == 0) { // some rarely used types are not supported Debug.logError("No hibernate dialect defined for the type [" + datasourceInfo.fieldTypeName + "]", MODULE); return null; } annotationConfiguration.setProperty("hibernate.dialect", dialect); Debug.logVerbose("configuring SessionFactory ...", MODULE); //build a sessionFactory String datasourceName = EntityConfigUtil.getDelegatorInfo(delegatorName).groupMap.get(getHelperName()); Debug.logVerbose("init sessionFactory by datasoure " + datasourceName, MODULE); sessionFactory = annotationConfiguration.configure(datasourceName + HIBERNATE_CFG_EXT) .buildSessionFactory(); Debug.logVerbose("listing loaded entities ...", MODULE); //iterator all classes which are success load of hibernate, it just only for debug use. if (Debug.isOn(Debug.VERBOSE)) { Map metadata = sessionFactory.getAllClassMetadata(); for (Iterator<EntityPersister> i = metadata.values().iterator(); i.hasNext();) { EntityPersister persister = i.next(); String className = persister.getClassMetadata().getEntityName(); Debug.logVerbose("SessionFactory Successfully Loaded AnnotatedClass : " + className, MODULE); } } sessionFactories.put(delegatorName, sessionFactory); } return sessionFactory; }