You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by Grim Shieldsson <gr...@yahoo.com> on 2003/07/26 01:38:51 UTC

Still having 1-N problems

I've tried everything to get this to work, and it's real close to doing
so.  The N updates mostly.  However, the old values are left in the db.
 They don't seem to appear in the constituted object, but that may be a
cache problem.. Here's the setup:
 <!--
   collection-class="java.util.Vector"   
collection-class="org.apache.ojb.broker.util.collections.RemovalAwareCollection"
		-->
<collection-descriptor
    	name="roles"
      	element-class-ref="virtual_village.membership.Role"
        collection-class="org.apache.ojb.odmg.collections.DListImpl"
      	>
        	<inverse-foreignkey field-ref="memberOID"/>
</collection-descriptor>

In the 1 class the roles are defined as RemovalAware, and also has been
DListImpl as well.
The actual code doing the saving is:

	public void updateMember(Member updatedMember) throws
MembershipDAOSysException
	{
		cat.debug( "Update member " + updatedMember);
		
		TransactionImpl tx = null;
		// 3. open transaction
		tx = (TransactionImpl) odmg.newTransaction();
		//tx =  odmg.newTransaction();
		
		try
		{
			Member staleMember = findByOID( updatedMember.getOid());
			
			cat.debug( "staleMember   " + staleMember);
			cat.debug( "updatedMember " + updatedMember);
					
			tx.begin();
			PersistenceBroker pb = tx.getBroker();
			pb.removeFromCache( staleMember);
			
			
			// 4. acquire write lock on new object
			tx.lock(staleMember, Transaction.WRITE);
			BeanUtils.copyProperties(updatedMember, staleMember);
			cat.debug( "after modification " + staleMember);
			
			// 5. commit transaction
			tx.commit();
		}catch( Throwable t)
		{
			cat.error( "Error trying to update member " + updatedMember);
			throw new MembershipDAOSysException( "Error trying to update member
" + updatedMember, t);
		}
	}

The calling routine looks like:
Member member = createMember();
			member.addRoles( createRoles( 5));
			testDAO.addMember( member);
			System.out.println( "Added: " + member);
			Member addedMember = testDAO.findByOID( member.getOid());
			assertTrue("The member and added member are not the same.", isSame(
member, addedMember));
			addedMember.setRoles( createRoles( 3));
			testDAO.updateMember( addedMember);

Could someone please point out what I'm doing wrong.  



=====
Grim Shieldsson (James A Barrows)
Acting Chieftain of Clan StormWolf
Barbarian Freehold Alliance
 "The real destroyer of the liberties of the people is he who spreads among them bounties, donations and benefits." 
--Plutarch

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org