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

📄 customcollectiontypes.txt

📁 Here is an implementation of UserCollectionType that returns a fast set. As you are looking below, n
💻 TXT
字号:
package com.javalobby.tnt.hib; import java.util.*;import javolution.util.FastSet;import org.hibernate.HibernateException;import org.hibernate.collection.*;import org.hibernate.engine.SessionImplementor;import org.hibernate.persister.collection.CollectionPersister;import org.hibernate.usertype.UserCollectionType; public class FastSetType implements UserCollectionType { 	public FastSetType() {			} 	// could be common for all collection implementations.	public boolean contains(Object collection, Object obj) {		Set set = (Set)collection;		return set.contains(obj);	}		// could be common for all collection implementations.	public Iterator getElementsIterator(Object collection) {		return ((Set)collection).iterator();	}		// common for list-like collections.	public Object indexOf(Object collection, Object obj) {		return null;	}	// factory method for certain collection type.	public Object instantiate() {		return new FastSet();	}		// standard wrapper for collection type.	public PersistentCollection instantiate(SessionImplementor session, CollectionPersister persister) throws HibernateException {		// Use hibernate's built in persistent set implementation		//wrapper		return new PersistentSet(session);	}		// could be common implementation for all collection implementations	public void replaceElements(		Object collectionA,		Object collectionB,		CollectionPersister persister,		Object owner,		Map copyCache,		SessionImplementor implementor) throws HibernateException {		Set setA = (Set)collectionA;		Set setB = (Set)collectionB;		setB.clear();		setB.addAll(setA);	}		// standard wrapper for collection type.	public PersistentCollection wrap(SessionImplementor session, Object colllection) {		// Use hibernate's built in persistent set implementation		//wrapper.		return new PersistentSet(session, (Set)colllection);	}} 
Then, we simply need to tell our mapping file to use our custom type - I'll reuse the mapping file from Monday's tip: 


<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD//EN"        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><hibernate-mapping>	<class name="com.javalobby.tnt.hib.User" table="USER" lazy="false">		<id name="id" type="long" column="ID">			<generator class="identity" />		</id>		<discriminator column="type" type="string"/>				<property name="firstName" column="first_name"/>		<property name="lastName" column="last_name"/>				<subclass name="com.javalobby.tnt.hib.Employee" discriminator-value="employee">			<join table="employee">				<key column="id"/>				<property name="jobTitle" column="job_title"/>				<many-to-one name="supervisor" column="supervisor_id" not-null="true" />			</join>			<subclass name="com.javalobby.tnt.hib.Employer" discriminator-value="employer">				<set 				name="subordinates"				collection-type="com.javalobby.tnt.hib.FastSetType"				>					<key column="supervisor_id" not-null="true"/>					<one-to-many class="com.javalobby.tnt.hib.Employee"/>				</set>				<join table="employer">					<key column="id"/>					<property name="companyCarBrand" column="company_car_brand"/>				</join>			</subclass>		</subclass>	</class></hibernate-mapping>

⌨️ 快捷键说明

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