Hi ½²³Õ¦Ü, Why don't you simply use the ODMG DMap Implementation? This will save you a lot of work!
Thomas ½²³Õ¦Ü wrote: > Hi! > I try to use user-defined collections to implement 1:n associations. I have read > tutorial3.html, and > code a sample program almost like as ArticleCollection class. Its name > MapCollection1.class : > <---------------------------------------------------------------------------------------> > package businessclass; > > import org.apache.ojb.broker.ManageableCollection; > import java.util.*; > > public class MapCollection1 extends HashMap implements ManageableCollection, > { > > public void add(SimpleUserForMap pMember) > { > this.put(pMember.getOID(),pMember); > } > > /** > * add a single Object to the Collection. This method is > * used during reading Collection elements from the > * database. Thus it is is save to cast anObject > * to the underlying element type of the collection. > */ > public void ojbAdd(java.lang.Object anObject) > { > if (anObject instanceof SimpleUserForMap){ > add((SimpleUserForMap) anObject); > } > } > > /** > * adds a Collection to this collection. Used in reading > * Extents from the Database. > * Thus it is save to cast otherCollection to this.getClass(). > */ > public void ojbAddAll( > ManageableCollection otherCollection) > { > this.putAll( > ((MapCollection1) otherCollection); > } > > /** > * returns an Iterator over all elements in the collection. > * Used during store and delete Operations. > */ > public java.util.Iterator ojbIterator() > { > return this.values().iterator(); > } > } > <---------------------------------------------------------------------------------------> > > Then I declare two objects SimpleUserForMap and SimpleOrgForMap. > SimpleOrgForMap has a MapCollection1 type property named "users" .Its elements are > SimpleUserForMap object. > They are: > > <---------------------------------------------------------------------------------------> > package businessclass; > > import persistentlayertest.PersistentObject; > > public class SimpleUserForMap extends PersistentObject{ > /** name*/ > private String name = null; > > public String getName() { > return this.name; > } > > public void setName(String pNewValue) { > this.name = pNewValue; > } > > private String organizationOID = ""; > > public String getOrganizationOID(){ > return this.organizationOID; > } > public void setOrganizationOID(String pNewValue){ > > this.organizationOID = pNewValue; > } > > private SimpleOrgForMap organization = null; > > public SimpleOrgForMap getOrganization(){ > return this.organization; > } > > public void setOrganization(SimpleOrgForMap pNewValue){ > this.organization = pNewValue; > setOrganizationOID(pNewValue.getOID()); > } > > public SimpleUserForMap() { > } > } > <---------------------------------------------------------------------------------------> > package businessclass; > > import persistentlayertest.PersistentObject; > import java.util.Collection; > import java.util.Vector; > import java.util.Map; > import java.util.HashMap; > import org.odmg.DMap; > import org.apache.ojb.odmg.collections.DMapImpl; > > public class SimpleOrgForMap extends PersistentObject{ > private MapCollection1 users ; > > public void addUsers(SimpleUserForMap pUser){ > System.out.println("***************Add Users For MapCollection."); > if (users == null) > { > users = new MapCollection1(); > } > this.users.add(pUser); > } > public MapCollection1 getUsers(){ > System.out.println("***************Get Users For MapCollection."); > return this.users; > } > > public void setUsers(MapCollection1 pMembers){ > this.users = pMembers; > } > public SimpleOrgForMap() { > } > } > <---------------------------------------------------------------------------------------> > > The repository is: > <---------------------------------------------------------------------------------------> > > <class-descriptor class="businessclass.SimpleOrgForMap" table="SimpleOrg"> > <field-descriptor id="1" > name="OID" > column="OID" > jdbc-type="CHAR" > primarykey="true" > /> > > <collection-descriptor > name="users" > element-class-ref="businessclass.SimpleUserForMap" > collection-class="businessclass.MapCollection1" > > > <inverse-foreignkey field-id-ref="3"/> > </collection-descriptor> > </class-descriptor> > > <class-descriptor class="businessclass.SimpleUserForMap" table="SimpleUser"> > <field-descriptor id="1" > name="OID" > column="OID" > jdbc-type="CHAR" > primarykey="true" > /> > <field-descriptor id="2" > name="name" > column="name" > jdbc-type="VARCHAR" > /> > <field-descriptor id="3" > name="organizationOID" > column="organizationOID" > jdbc-type="CHAR" > /> > <reference-descriptor > name="organization" > class-ref="businessclass.SimpleOrgForMap" > > > <foreignkey field-id-ref="3"/> > </reference-descriptor> > </class-descriptor> > > <---------------------------------------------------------------------------------> > > I new a SimpleOrgForMap object that there are several SimpleUserForMap elements in > its users property. > When I presistent SimpleOrgForMap , always raise the error message: > > 11:40:27,125 INFO [STDOUT] Locking obj [EMAIL PROTECTED] with lock mode 4 failed > 11:40:27,140 INFO [STDOUT] businessclass.MapCollection1 > 11:40:27,156 ERROR [STDERR] org.odmg.ClassNotPersistenceCapableException: > businessclass.MapCollection1 > 11:40:27,171 ERROR [STDERR] at org.apache.ojb.odmg.ObjectEnvelope.manage(Unknown > Source) > 11:40:27,187 ERROR [STDERR] at org.apache.ojb.odmg.ObjectEnvelope.<init>(Unknown > Source) > 11:40:27,203 ERROR [STDERR] at > org.apache.ojb.odmg.TransactionImpl.register(Unknown Source) > 11:40:27,218 ERROR [STDERR] at org.apache.ojb.odmg.TransactionImpl.lock(Unknown > Source) > 11:40:27,234 ERROR [STDERR] at > org.apache.ojb.odmg.NarrowTransaction.lock(Unknown Source) > : > : > What wrong with my code or repository setting? May I set OJB.properties some > attribute specially?? > > Thanks in advance > Dogie Tsai > > ps.I use odmg to persistent objects, and use it with JBoss3.0.4. > The 1:n associations can work well with Collection,List and Vector. > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]