List of usage examples for org.hibernate.engine.spi CollectionEntry getLoadedPersister
public CollectionPersister getLoadedPersister()
From source file:br.gov.jfrj.siga.model.Objeto.java
License:Open Source License
private static void cascadeOrphans(Objeto base, PersistentCollection persistentCollection, boolean willBeSaved) throws UnexpectedException { SessionImpl session = ((SessionImpl) em().getDelegate()); PersistenceContext pc = session.getPersistenceContext(); CollectionEntry ce = pc.getCollectionEntry(persistentCollection); if (ce != null) { CollectionPersister cp = ce.getLoadedPersister(); if (cp != null) { Type ct = cp.getElementType(); if (ct instanceof EntityType) { EntityEntry entry = pc.getEntry(base); String entityName = entry.getEntityName(); entityName = ((EntityType) ct).getAssociatedEntityName(session.getFactory()); if (ce.getSnapshot() != null) { Collection orphans = ce.getOrphans(entityName, persistentCollection); for (Object o : orphans) { saveAndCascadeIfObjeto(o, willBeSaved); }/*from ww w .j a v a2 s. c om*/ } } } } }
From source file:com.amalto.core.storage.hibernate.TypeMapping.java
License:Open Source License
@SuppressWarnings({ "rawtypes", "unchecked" }) protected static <T> List<T> getFullList(List valueList) { if (valueList == null) { return null; }//from www . j a v a 2s .c o m if (!(valueList instanceof PersistentList)) { return valueList; } PersistentList list = (PersistentList) valueList; List<T> fullList = new LinkedList<T>(); SessionImplementor session = list.getSession(); if (!session.isConnected()) { throw new IllegalStateException("Session is not connected: impossible to read values from database."); //$NON-NLS-1$ } CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(list); CollectionPersister persister = entry.getLoadedPersister(); if (persister != null) { int databaseSize = persister.getSize(entry.getKey(), session); if (list.size() == databaseSize && !list.contains(null)) { // No need to reload a list (no omission in list and size() corresponds to size read from database). return list; } for (int i = 0; i < databaseSize; i++) { T wrapper = (T) persister.getElementByIndex(entry.getLoadedKey(), i, session, list.getOwner()); fullList.add(wrapper); } } // Returns a unmodifiable list -> returned list is *not* a persistent list so change tracking is not possible, // returning a unmodifiable list is a safety for code using returned list. return Collections.unmodifiableList(fullList); }
From source file:org.babyfish.hibernate.collection.spi.persistence.AbstractBasePersistence.java
License:Open Source License
@Override public final boolean setCurrentSession(SessionImplementor session) throws HibernateException { if (session == this.getSession()) { return false; } else {//from w w w . ja v a 2 s.c om if (this.isConnectedToSession()) { CollectionEntry ce = session.getPersistenceContext() .getCollectionEntry(this.getWrapperPersistentCollection()); if (ce == null) { throw new HibernateException( "Illegal attempt to associate a collection with two open sessions"); } else { throw new HibernateException( "Illegal attempt to associate a collection with two open sessions: " + MessageHelper.collectionInfoString(ce.getLoadedPersister(), ce.getLoadedKey(), session.getFactory())); } } else { this.setSession(session); return true; } } }
From source file:org.eclipse.emf.cdo.server.internal.hibernate.tuplizer.WrappedHibernateList.java
License:Open Source License
public int size() { if (cachedSize != -1) { return cachedSize; }/*from ww w . j a va 2s .c om*/ if (getDelegate() instanceof AbstractPersistentCollection) { final AbstractPersistentCollection collection = (AbstractPersistentCollection) getDelegate(); if (collection.wasInitialized()) { cachedSize = -1; return getDelegate().size(); } final SessionImplementor session = collection.getSession(); CollectionEntry entry = session.getPersistenceContext().getCollectionEntry(collection); CollectionPersister persister = entry.getLoadedPersister(); if (collection.hasQueuedOperations()) { session.flush(); } cachedSize = persister.getSize(entry.getLoadedKey(), session); return cachedSize; } return getDelegate().size(); }
From source file:org.granite.tide.hibernate4.HibernateDataChangePublishListener.java
License:Open Source License
@SuppressWarnings("unchecked") public void onPreUpdateCollection(PreCollectionUpdateEvent event) { Object owner = event.getAffectedOwnerOrNull(); if (DataPublishListener.handleExclude(owner)) return;//from www . j a v a2 s . c o m CollectionEntry collectionEntry = event.getSession().getPersistenceContext() .getCollectionEntry(event.getCollection()); String propertyName = collectionEntry.getRole().substring( collectionEntry.getLoadedPersister().getOwnerEntityPersister().getEntityName().length() + 1); Object change = getChange(collectionEntry.getLoadedPersister().getOwnerEntityPersister(), event.getSession(), event.getAffectedOwnerEntityName(), event.getAffectedOwnerIdOrNull(), owner); if (change == null || !(change instanceof Change)) return; PersistentCollection newColl = event.getCollection(); Serializable oldColl = collectionEntry.getSnapshot(); if (oldColl == null && newColl.hasQueuedOperations()) { List<Object[]> added = new ArrayList<Object[]>(); List<Object[]> removed = new ArrayList<Object[]>(); List<Object[]> updated = new ArrayList<Object[]>(); List<?> queuedOperations = get(newColl, "operationQueue", List.class); for (Object op : queuedOperations) { // Great !! if (op.getClass().getName().endsWith("$Add")) { added.add(new Object[] { get(op, "index"), get(op, "value") }); } else if (op.getClass().getName().endsWith("$SimpleAdd")) { added.add(new Object[] { null, get(op, "value") }); } else if (op.getClass().getName().endsWith("$Put")) { added.add(new Object[] { get(op, "index"), get(op, "value") }); } else if (op.getClass().getName().endsWith("$Remove")) { removed.add(new Object[] { get(op, "index"), get(op, "old") }); } else if (op.getClass().getName().endsWith("$SimpleRemove")) { removed.add(new Object[] { null, get(op, "value") }); } else if (op.getClass().getName().endsWith("$Set")) { updated.add(new Object[] { get(op, "index"), get(op, "value") }); } } CollectionChange[] collChanges = new CollectionChange[added.size() + removed.size() + updated.size()]; int idx = 0; for (Object[] obj : added) collChanges[idx++] = new CollectionChange(1, obj[0], obj[1]); for (Object[] obj : removed) { Object value = obj[1]; if (value != null && value.getClass().isAnnotationPresent(Entity.class)) { org.granite.util.Entity e = new org.granite.util.Entity(value); value = new ChangeRef(e.getName(), (String) get(value, "uid"), (Serializable) e.getIdentifier()); } collChanges[idx++] = new CollectionChange(-1, obj[0], value); } for (Object[] obj : updated) collChanges[idx++] = new CollectionChange(0, obj[0], obj[1]); ((Change) change).addCollectionChanges(propertyName, collChanges); } else if (oldColl != null && newColl instanceof List<?>) { List<?> oldSnapshot = (List<?>) oldColl; List<?> newList = (List<?>) newColl; List<Object[]> ops = Utils.diffLists(oldSnapshot, newList); CollectionChange[] collChanges = new CollectionChange[ops.size()]; int idx = 0; for (Object[] obj : ops) collChanges[idx++] = new CollectionChange((Integer) obj[0], obj[1], obj[2]); ((Change) change).addCollectionChanges(propertyName, collChanges); } else if (oldColl != null && newColl instanceof Collection<?>) { Map<?, ?> oldSnapshot = (Map<?, ?>) oldColl; Set<Object> added = new HashSet<Object>(); added.addAll((Collection<?>) newColl); added.removeAll(new HashSet<Object>(oldSnapshot.keySet())); Set<Object> removed = new HashSet<Object>(); removed.addAll(new HashSet<Object>(oldSnapshot.keySet())); removed.removeAll((Collection<?>) newColl); CollectionChange[] collChanges = new CollectionChange[added.size() + removed.size()]; int idx = 0; for (Object obj : added) collChanges[idx++] = new CollectionChange(1, null, obj); for (Object obj : removed) collChanges[idx++] = new CollectionChange(-1, null, obj); ((Change) change).addCollectionChanges(propertyName, collChanges); } else if (oldColl != null && newColl instanceof Map<?, ?>) { Map<?, ?> oldSnapshot = (Map<?, ?>) oldColl; Set<Entry<Object, Object>> added = new HashSet<Entry<Object, Object>>(); added.addAll(((Map<Object, Object>) newColl).entrySet()); added.removeAll(new HashMap<Object, Object>(oldSnapshot).entrySet()); Set<Entry<Object, Object>> removed = new HashSet<Entry<Object, Object>>(); removed.addAll(new HashMap<Object, Object>(oldSnapshot).entrySet()); removed.removeAll(((Map<Object, Object>) newColl).entrySet()); CollectionChange[] collChanges = new CollectionChange[added.size() + removed.size()]; int idx = 0; for (Entry<?, ?> me : added) collChanges[idx++] = new CollectionChange(1, me.getKey(), me.getValue()); for (Entry<?, ?> me : removed) collChanges[idx++] = new CollectionChange(-1, me.getKey(), me.getValue()); ((Change) change).addCollectionChanges(propertyName, collChanges); } }