Wiki source code of Count To-Many Objects without Loading
Last modified by Jonathan 'Wolf' Rentzsch on 2008/11/24 12:35
Hide last authors
author | version | line-number | content |
---|---|---|---|
![]() |
10.1 | 1 | If you want to count the number of objects off a to-many, but without fetching all of them into memory, then add this to your _Entity.java templates inside the to-many section: |
![]() |
3.1 | 2 | |
3 | {{code}} | ||
4 | |||
![]() |
9.1 | 5 | public Number count${relationship.capitalizedName}() { |
![]() |
3.1 | 6 | return countForRelationship("${relationship.name}"); |
7 | } | ||
8 | |||
![]() |
9.1 | 9 | public EOQualifier qualifierFor${relationship.capitalizedName}() { |
![]() |
3.1 | 10 | return qualifierForRelationshipWithKey("${relationship.name}"); |
11 | } | ||
12 | |||
13 | {{/code}} | ||
14 | |||
![]() |
10.1 | 15 | Then either add this to _Entity.java (lame), or to a generic superclass that you use for all of your EO objects (preferred), add this: |
![]() |
3.1 | 16 | |
17 | {{code}} | ||
18 | |||
![]() |
9.1 | 19 | public EOQualifier qualifierForRelationshipWithKey(String aKey) |
![]() |
3.1 | 20 | { |
21 | this.willRead(); | ||
22 | |||
23 | if ((aKey != null)) | ||
24 | { | ||
25 | String anEntityName = this.entityName(); | ||
26 | EOEntity anEntity = EOModelGroup.defaultGroup().entityNamed(anEntityName); | ||
27 | EORelationship aRelationship = anEntity.relationshipNamed(aKey); | ||
28 | |||
29 | if (aRelationship != null) | ||
30 | { | ||
31 | EOEditingContext anEditingContext = this.editingContext(); | ||
32 | EOGlobalID aGlobalID = anEditingContext.globalIDForObject(this); | ||
33 | String aModelName = anEntity.model().name(); | ||
34 | EODatabaseContext aDatabaseContext = EOUtilities.databaseContextForModelNamed(anEditingContext, | ||
35 | aModelName); | ||
36 | aDatabaseContext.lock(); | ||
37 | NSDictionary aRow = aDatabaseContext.snapshotForGlobalID(aGlobalID); | ||
38 | aDatabaseContext.unlock(); | ||
39 | EOQualifier aQualifier = aRelationship.qualifierWithSourceRow(aRow); | ||
40 | |||
41 | return aQualifier; | ||
42 | } | ||
43 | } | ||
44 | |||
45 | return null; | ||
46 | } | ||
47 | |||
48 | /** | ||
49 | * Return count for the given relationship. | ||
50 | */ | ||
![]() |
9.1 | 51 | public Integer countForRelationship(String key) |
![]() |
3.1 | 52 | { |
![]() |
9.1 | 53 | EOQualifier qual = qualifierForRelationshipWithKey(key); |
![]() |
3.1 | 54 | if (qual != null) |
55 | { | ||
56 | String anEntityName = this.entityName(); | ||
57 | EOEntity anEntity = EOModelGroup.defaultGroup().entityNamed(anEntityName); | ||
58 | EORelationship aRelationship = anEntity.relationshipNamed(key); | ||
59 | return ERXEOControlUtilities.objectCountWithQualifier(this.editingContext(), aRelationship | ||
60 | .destinationEntity().name(), qual); | ||
61 | } | ||
62 | return null; | ||
63 | |||
64 | } | ||
65 | |||
66 | {{/code}} |