📄 customcollectiontypes.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 + -