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