with Wrigley's Doublemint gum. In my case we're halving it at minimum.
I added mappedBy to my @Persistent annotations and now things are getting into
the Set twice. Very strange. I can't figure out what I'm doing wrong.
In the following setup() I'm adding 3 WaitlistEntry objects but the Set ends
with 6. The number of persisted WaitlistEntry objects is correctly 3.
Here are the relevant (I hope) bits of the usual suspects and a pretty printed
version of the dump of waitlistEntries that shows the duplicates.
The remaining sane parts of my brain thank you for your help.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable =
"true")
public class Platform implements Serializable, Comparable<Platform> {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
@Persistent
private String name;
@Persistent
private Short ordinal;
@Persistent
private Facility facility;
// mappedBy causes entries to be added twice
@Element(dependent = "true")
@Persistent(defaultFetchGroup = "true", mappedBy = "platform")
private Set<Host> hosts = new HashSet<Host>(0);
// mappedBy causes entries to be added twice
@Element(dependent = "true")
@Persistent(defaultFetchGroup = "true", mappedBy = "platform")
private Set<WaitlistEntry> waitlistEntries = new HashSet<WaitlistEntry>(0);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable =
"true")
public class WaitlistEntry implements Serializable, Comparable<WaitlistEntry> {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key id;
@Persistent
private Key userKey;
@Persistent
private Date entryTime;
@Persistent
private Platform platform;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
test
@Before
public void setup() throws Exception {
Assert.assertEquals("facilities entity count",
0, this.testUtils.entityCounter(Facility.class));
final Facility facility = new Facility("Abc Facility",
this.facilityName, false);
final Platform platformPc = new Platform("pc");
final Platform platformMac = new Platform("mac");
Assert.assertEquals("waitlistEntry list size",
0, platformPc.getWaitlistEntries().size());
final User user1 = new User(this.userName, Long.toString(111L));
final User user2 = new User(this.userName + "1", Long.toString(222L));
final User user3 = new User(this.userName + "2", Long.toString(333L));
platformPc.addWaitlistEntry(new
WaitlistEntry(this.userDao.makePersistent(user1)));
platformPc.addWaitlistEntry(new
WaitlistEntry(this.userDao.makePersistent(user2)));
platformPc.addWaitlistEntry(new
WaitlistEntry(this.userDao.makePersistent(user3)));
facility.addPlatform(platformPc);
facility.addPlatform(platformMac);
final Facility persistedFacility =
this.facilityDao.makePersistent(facility);
this.log.debug("waitlistEntries: {}", platformPc.getWaitlistEntries());
this.log.debug("facilities entity count: {}",
this.testUtils.entityCounter(Facility.class));
this.log.debug("user entity count: {}",
this.testUtils.entityCounter(User.class));
this.log.debug("platform list size: {}",
persistedFacility.getPlatforms().size());
this.log.debug("platform entity count: {}",
this.testUtils.entityCounter(Platform.class));
this.log.debug("waitlistEntry list size: {}",
platformPc.getWaitlistEntries().size());
this.log.debug("waitlistEntry entity count: {}",
this.testUtils.entityCounter(WaitlistEntry.class));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
dao
public E makePersistent(final E entity) {
final E persisted = getPersistenceManager().makePersistent(entity);
return (getPersistenceManager().detachCopy(persisted));
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
model/dto/domain class
/**
* @return the waitlistEntries
*/
public Set<WaitlistEntry> getWaitlistEntries() {
this.log.debug("waitlistEntries class: {}",
this.waitlistEntries.getClass().getCanonicalName());
return (Collections.unmodifiableSet(this.waitlistEntries));
}
/**
* @param waitlistEntry
* @return true if added
*/
public boolean addWaitlistEntry(final WaitlistEntry waitlistEntry) {
this.log.debug("adding: {}", waitlistEntry);
return (this.waitlistEntries.add(waitlistEntry));
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
debug dump
2009-11-01 19:16:03.381 PST, DEBUG: [main]
com.objecteffects.waitlist.db.impl.dao.jdo.WaitlistEntryDaoTest.setup.90:
waitlistEntries:[
com.objecteffects.waitlist.db.domain.waitlisten...@19ba1d8[
id=Facility(4)/Platform(6)/WaitlistEntry(7),
userKey=User(3),
entryTime=Sun Nov 01 19:16:03 PST 2009,
platform=com.objecteffects.waitlist.db.domain.platf...@9e75f6[
id=Facility(4)/Platform(6),
name=pc,
ordinal=<null>,
facility=com.objecteffects.waitlist.db.domain.facil...@1f82253[
id=Facility(4),
name=facility-abc,
fullName=Abc Facility,
waitlistEnabled=false,
platforms=[
com.objecteffects.waitlist.db.domain.platf...@15291cd[
id=Facility(4)/Platform(5),
name=mac,
ordinal=<null>,
facility=com.objecteffects.waitlist.db.domain.facil...@1f82253,
hosts=[],
waitlistEntries=[],
jdoDetachedState=<null>
],
com.objecteffects.waitlist.db.domain.platf...@9e75f6[
id=Facility(4)/Platform(6),
name=pc,
ordinal=<null>,
facility=com.objecteffects.waitlist.db.domain.facil...@1f82253,
hosts=[],
waitlistEntries=[
com.objecteffects.waitlist.db.domain.waitlisten...@19ba1d8[
id=Facility(4)/Platform(6)/WaitlistEntry(7),
userKey=User(3),
entryTime=Sun Nov 01 19:16:03 PST 2009,
platform=com.objecteffects.waitlist.db.domain.platf...@9e75f6,
jdoDetachedState=<null>
],
com.objecteffects.waitlist.db.domain.waitlisten...@154c054[
id=Facility(4)/Platform(6)/WaitlistEntry(8),
userKey=User(1),
entryTime=Sun Nov 01 19:16:03 PST 2009,
platform=com.objecteffects.waitlist.db.domain.platf...@9e75f6,
jdoDetachedState=<null>
],
com.objecteffects.waitlist.db.domain.waitlisten...@148c02f[
id=Facility(4)/Platform(6)/WaitlistEntry(9),
userKey=User(2),
entryTime=Sun Nov 01 19:16:03 PST 2009,
platform=com.objecteffects.waitlist.db.domain.platf...@9e75f6,
jdoDetachedState=<null>
],
com.objecteffects.waitlist.db.domain.waitlisten...@148c02f[
id=Facility(4)/Platform(6)/WaitlistEntry(9),
userKey=User(2),
entryTime=Sun Nov 01 19:16:03 PST 2009,
platform=com.objecteffects.waitlist.db.domain.platf...@9e75f6,
jdoDetachedState=<null>
],
com.objecteffects.waitlist.db.domain.waitlisten...@154c054[
id=Facility(4)/Platform(6)/WaitlistEntry(8),
userKey=User(1),
entryTime=Sun Nov 01 19:16:03 PST 2009,
platform=com.objecteffects.waitlist.db.domain.platf...@9e75f6,
jdoDetachedState=<null>
],
com.objecteffects.waitlist.db.domain.waitlisten...@19ba1d8[
id=Facility(4)/Platform(6)/WaitlistEntry(7),
userKey=User(3),
entryTime=Sun Nov 01 19:16:03 PST 2009,
platform=com.objecteffects.waitlist.db.domain.platf...@9e75f6,
jdoDetachedState=<null>
]
],
jdoDetachedState=<null>
],
(rest deleted)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2009-11-01 19:16:03.615 PST, DEBUG: [main]
com.objecteffects.waitlist.db.impl.dao.jdo.WaitlistEntryDaoTest.setup.95:
facilities entity count: 1
2009-11-01 19:16:03.615 PST, DEBUG: [main]
com.objecteffects.waitlist.db.impl.dao.jdo.WaitlistEntryDaoTest.setup.97: user
entity count: 3
2009-11-01 19:16:03.615 PST, DEBUG: [main]
com.objecteffects.waitlist.db.impl.dao.jdo.WaitlistEntryDaoTest.setup.99:
platform list size: 2
2009-11-01 19:16:03.615 PST, DEBUG: [main]
com.objecteffects.waitlist.db.impl.dao.jdo.WaitlistEntryDaoTest.setup.101:
platform entity count: 2
2009-11-01 19:16:03.615 PST, DEBUG: [main]
com.objecteffects.waitlist.db.domain.Platform.getWaitlistEntries.117:
waitlistEntries class: org.datanucleus.sco.backed.HashSet
2009-11-01 19:16:03.615 PST, DEBUG: [main]
com.objecteffects.waitlist.db.impl.dao.jdo.WaitlistEntryDaoTest.setup.103:
waitlistEntry list size: 6
2009-11-01 19:16:03.677 PST, DEBUG: [main]
com.objecteffects.waitlist.db.impl.dao.jdo.WaitlistEntryDaoTest.setup.105:
waitlistEntry entity count: 3
2009-11-01 19:16:03.677 PST, DEBUG: [main]
com.objecteffects.waitlist.db.domain.Platform.getWaitlistEntries.117:
waitlistEntries class: org.datanucleus.sco.backed.HashSet
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Google App Engine for Java" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/google-appengine-java?hl=en
-~----------~----~----~----~------~----~------~--~---