⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractpersistentcollection.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	public boolean isRowUpdatePossible() {		return true;	}	/**	 * Does this instance have any "queued" additions?	 */	public final boolean hasQueuedOperations() {		return operationQueue!=null;	}	/**	 * Iterate the "queued" additions	 */	public final Iterator queuedAdditionIterator() {		if ( hasQueuedOperations() ) {			return new Iterator() {				int i = 0;				public Object next() {					return ( (DelayedOperation) operationQueue.get(i++) ).getAddedInstance();				}				public boolean hasNext() {					return i<operationQueue.size();				}				public void remove() {					throw new UnsupportedOperationException();				}			};		}		else {			return EmptyIterator.INSTANCE;		}	}	/**	 * Iterate the "queued" additions	 */	public final Collection getQueuedOrphans(String entityName) {		if ( hasQueuedOperations() ) {			Collection additions = new ArrayList( operationQueue.size() );			Collection removals = new ArrayList( operationQueue.size() );			for ( int i = 0; i < operationQueue.size(); i++ ) {				DelayedOperation op = (DelayedOperation) operationQueue.get(i);				additions.add( op.getAddedInstance() );				removals.add( op.getOrphan() );			}			return getOrphans(removals, additions, entityName, session);		}		else {			return CollectionHelper.EMPTY_COLLECTION;		}	}	/**	 * Called before inserting rows, to ensure that any surrogate keys	 * are fully generated	 */	public void preInsert(CollectionPersister persister) throws HibernateException {}	/**	 * Called after inserting a row, to fetch the natively generated id	 */	public void afterRowInsert(CollectionPersister persister, Object entry, int i) throws HibernateException {}	/**	 * get all "orphaned" elements	 */	public abstract Collection getOrphans(Serializable snapshot, String entityName) throws HibernateException;	/**	 * Get the current session	 */	public final SessionImplementor getSession() {		return session;	}	final class IteratorProxy implements Iterator {		private final Iterator iter;		IteratorProxy(Iterator iter) {			this.iter=iter;		}		public boolean hasNext() {			return iter.hasNext();		}		public Object next() {			return iter.next();		}		public void remove() {			write();			iter.remove();		}	}	final class ListIteratorProxy implements ListIterator {		private final ListIterator iter;		ListIteratorProxy(ListIterator iter) {			this.iter = iter;		}		public void add(Object o) {			write();			iter.add(o);		}		public boolean hasNext() {			return iter.hasNext();		}		public boolean hasPrevious() {			return iter.hasPrevious();		}		public Object next() {			return iter.next();		}		public int nextIndex() {			return iter.nextIndex();		}		public Object previous() {			return iter.previous();		}		public int previousIndex() {			return iter.previousIndex();		}		public void remove() {			write();			iter.remove();		}		public void set(Object o) {			write();			iter.set(o);		}	}	class SetProxy implements java.util.Set {		final Collection set;		SetProxy(Collection set) {			this.set=set;		}		public boolean add(Object o) {			write();			return set.add(o);		}		public boolean addAll(Collection c) {			write();			return set.addAll(c);		}		public void clear() {			write();			set.clear();		}		public boolean contains(Object o) {			return set.contains(o);		}		public boolean containsAll(Collection c) {			return set.containsAll(c);		}		public boolean isEmpty() {			return set.isEmpty();		}		public Iterator iterator() {			return new IteratorProxy( set.iterator() );		}		public boolean remove(Object o) {			write();			return set.remove(o);		}		public boolean removeAll(Collection c) {			write();			return set.removeAll(c);		}		public boolean retainAll(Collection c) {			write();			return set.retainAll(c);		}		public int size() {			return set.size();		}		public Object[] toArray() {			return set.toArray();		}		public Object[] toArray(Object[] array) {			return set.toArray(array);		}	}	final class ListProxy implements java.util.List {		private final java.util.List list;		ListProxy(java.util.List list) {			this.list = list;		}		public void add(int index, Object value) {			write();			list.add(index, value);		}		/**		 * @see java.util.Collection#add(Object)		 */		public boolean add(Object o) {			write();			return list.add(o);		}		/**		 * @see java.util.Collection#addAll(Collection)		 */		public boolean addAll(Collection c) {			write();			return list.addAll(c);		}		/**		 * @see java.util.List#addAll(int, Collection)		 */		public boolean addAll(int i, Collection c) {			write();			return list.addAll(i, c);		}		/**		 * @see java.util.Collection#clear()		 */		public void clear() {			write();			list.clear();		}		/**		 * @see java.util.Collection#contains(Object)		 */		public boolean contains(Object o) {			return list.contains(o);		}		/**		 * @see java.util.Collection#containsAll(Collection)		 */		public boolean containsAll(Collection c) {			return list.containsAll(c);		}		/**		 * @see java.util.List#get(int)		 */		public Object get(int i) {			return list.get(i);		}		/**		 * @see java.util.List#indexOf(Object)		 */		public int indexOf(Object o) {			return list.indexOf(o);		}		/**		 * @see java.util.Collection#isEmpty()		 */		public boolean isEmpty() {			return list.isEmpty();		}		/**		 * @see java.util.Collection#iterator()		 */		public Iterator iterator() {			return new IteratorProxy( list.iterator() );		}		/**		 * @see java.util.List#lastIndexOf(Object)		 */		public int lastIndexOf(Object o) {			return list.lastIndexOf(o);		}		/**		 * @see java.util.List#listIterator()		 */		public ListIterator listIterator() {			return new ListIteratorProxy( list.listIterator() );		}		/**		 * @see java.util.List#listIterator(int)		 */		public ListIterator listIterator(int i) {			return new ListIteratorProxy( list.listIterator(i) );		}		/**		 * @see java.util.List#remove(int)		 */		public Object remove(int i) {			write();			return list.remove(i);		}		/**		 * @see java.util.Collection#remove(Object)		 */		public boolean remove(Object o) {			write();			return list.remove(o);		}		/**		 * @see java.util.Collection#removeAll(Collection)		 */		public boolean removeAll(Collection c) {			write();			return list.removeAll(c);		}		/**		 * @see java.util.Collection#retainAll(Collection)		 */		public boolean retainAll(Collection c) {			write();			return list.retainAll(c);		}		/**		 * @see java.util.List#set(int, Object)		 */		public Object set(int i, Object o) {			write();			return list.set(i, o);		}		/**		 * @see java.util.Collection#size()		 */		public int size() {			return list.size();		}		/**		 * @see java.util.List#subList(int, int)		 */		public List subList(int i, int j) {			return list.subList(i, j);		}		/**		 * @see java.util.Collection#toArray()		 */		public Object[] toArray() {			return list.toArray();		}		/**		 * @see java.util.Collection#toArray(Object[])		 */		public Object[] toArray(Object[] array) {			return list.toArray(array);		}	}	protected interface DelayedOperation {		public void operate();		public Object getAddedInstance();		public Object getOrphan();	}		/**	 * Given a collection of entity instances that used to	 * belong to the collection, and a collection of instances	 * that currently belong, return a collection of orphans	 */	protected static Collection getOrphans(			Collection oldElements, 			Collection currentElements, 			String entityName, 			SessionImplementor session)	throws HibernateException {		// short-circuit(s)		if ( currentElements.size()==0 ) return oldElements; // no new elements, the old list contains only Orphans		if ( oldElements.size()==0) return oldElements; // no old elements, so no Orphans neither				Type idType = session.getFactory().getEntityPersister(entityName).getIdentifierType();		// create the collection holding the Orphans		Collection res = new ArrayList();		// collect EntityIdentifier(s) of the *current* elements - add them into a HashSet for fast access		java.util.Set currentIds = new HashSet();		for ( Iterator it=currentElements.iterator(); it.hasNext(); ) {			Object current = it.next();			if ( current!=null && ForeignKeys.isNotTransient(entityName, current, null, session) ) {				Serializable currentId = ForeignKeys.getEntityIdentifierIfNotUnsaved(entityName, current, session);				currentIds.add( new TypedValue( idType, currentId, session.getEntityMode() ) );			}		}		// iterate over the *old* list		for ( Iterator it=oldElements.iterator(); it.hasNext(); ) {			Object old = it.next();			Serializable oldId = ForeignKeys.getEntityIdentifierIfNotUnsaved(entityName, old, session);			if ( !currentIds.contains( new TypedValue( idType, oldId, session.getEntityMode() ) ) ) {				res.add(old);			}		}		return res;	}	static void identityRemove(			Collection list, 			Object object, 			String entityName, 			SessionImplementor session)	throws HibernateException {		if ( object!=null && ForeignKeys.isNotTransient(entityName, object, null, session) ) {						Type idType = session.getFactory().getEntityPersister(entityName).getIdentifierType();			Serializable idOfCurrent = ForeignKeys.getEntityIdentifierIfNotUnsaved(entityName, object, session);			Iterator iter = list.iterator();			while ( iter.hasNext() ) {				Serializable idOfOld = ForeignKeys.getEntityIdentifierIfNotUnsaved(entityName, iter.next(), session);				if ( idType.isEqual( idOfCurrent, idOfOld, session.getEntityMode(), session.getFactory() ) ) {					iter.remove();					break;				}			}		}	}		public Object getIdentifier(Object entry, int i) {		throw new UnsupportedOperationException();	}		public Object getOwner() {		return owner;	}		public void setOwner(Object owner) {		this.owner = owner;	}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -