One other reason - non class property relationships help EOF resolve abstract 
entity relationships when prefetching.  Without the non-class property back 
pointing relationships, the prefetched sub-entities don’t get connected 
properly.

> On Jun 6, 2016, at 12:58 PM, Chuck Hill <[email protected]> wrote:
> 
> Relationships that are a class property are fetched and maintained by EOF.  
> Relationships that are not a class property are just names that you can use 
> in a fetch specification – it tells EOF how to navigate the joins but EOF 
> will not fetch or manage them.
>  
> Chuck
>  
>  
> From: Jérémy DE ROYER <[email protected]>
> Date: Monday, June 6, 2016 at 8:44 AM
> To: Samuel Pelletier <[email protected]>
> Cc: Chuck Hill <[email protected]>, Philippe Rabier <[email protected]>, 
> WebObjects-Dev <[email protected]>
> Subject: Re: How to avoid expensive fetches in database when setting 
> to-one-relationship
>  
> According to yours posts, it seems that for performance reasons, we have to 
> think twice (or more) before adding a reverse to Many relationship.
>  
> Before removing all the non-usefull to Many relationships and add the 
> associated delete controls, I have one more question (sic) :
> - What’s the difference, in an EOModel, between a to Many relationship 
> without Class Property and a to Many relationship with Class Property ?
> (or : Is it worth keeping them or is it better deleting all of them)
>  
> Jérémy
>  
> Le 6 juin 2016 à 14:48, Samuel Pelletier <[email protected] 
> <mailto:[email protected]>> a écrit :
>  
> Jérémy,
>  
> You can keep a cache of the results inside your EO. As the EO is specific to 
> an EOEditingContext, it will be refreshed often if you use the pattern of 
> creating a new EOEditingContext per main WOComponent.
>  
> BTW, the toMany is triggered by the fact we ask EOF to update the reverse 
> relationships. By using an EO in a toOne, we add this EO to the reverse 
> toMany, to add an object to an array, this array needs to exists.
>  
> Samuel
>  
>  
> Le 5 juin 2016 à 18:49, Jérémy DE ROYER <[email protected] 
> <mailto:[email protected]>> a écrit :
>  
> I tried this way last week but if it's faster when saving, it is much slower 
> when reading because it fetches each time without caching...
>  
> The reading performances are really good but I have to find a way to speed up 
> when inserting new objects that "overuse" the database and slow down the 
> other users
> 
> Jeremy
> 
> Le 6 juin 2016 à 00:33, Chuck Hill <[email protected] 
> <mailto:[email protected]>> a écrit :
> 
> That is what I meant by fetching.  You need to re-implement those methods.   
> Change it to do an fetch on Customer where modeTransport == this
>  
> You can still use it to fetch a ModeTransport based on “listOrder contains 
> order”. 
> Chuck
>  
>  
> From: Jérémy DE ROYER <[email protected] 
> <mailto:[email protected]>>
> Date: Sunday, June 5, 2016 at 3:26 PM
> To: Chuck Hill <[email protected] <mailto:[email protected]>>
> Cc: WebObjects-Dev <[email protected] 
> <mailto:[email protected]>>
> Subject: Re: How to avoid expensive fetches in database when setting 
> to-one-relationship
>  
> What do you mean with « you can still use it for fetching » ?
>  
> I removed the class property for the Customer to Order (but keeped the « 
> listOrder » relationship)
>  
> When I set the customer to the order, it runs fast.
>  
> But when I retrieve the orders using the method below :
>  
>   public NSArray<Customer> listOrder() {
>     return (NSArray<Customer>)storedValueForKey("listOrder");
>   }
>  
> I get an error :
>  
> <com.webobjects.foundation.NSKeyValueCoding$UnknownKeyException message 
> ‘<Customer 0x72c7423b> valueForKey(): lookup of unknown key: 'listOrder'.
> This class does not have an instance variable of the name listOrder or 
> _listOrder, nor a method of the name listOrder  _listOrder, getListOrder, or 
> _getListOrder' object ‘{...}' key 'listOrder'>
> at 
> com.webobjects.foundation.NSKeyValueCoding$DefaultImplementation.handleQueryWithUnboundKey(NSKeyValueCoding.java:1377)
> at 
> com.webobjects.eocontrol.EOCustomObject.handleQueryWithUnboundKey(EOCustomObject.java:1545)
> at 
> com.webobjects.foundation.NSKeyValueCoding$Utility.handleQueryWithUnboundKey(NSKeyValueCoding.java:494)
> at 
> com.webobjects.foundation.NSKeyValueCoding$_KeyBinding.valueInObject(NSKeyValueCoding.java:894)
> at 
> com.webobjects.eocontrol.EOCustomObject.storedValueForKey(EOCustomObject.java:1634)
> at Customer.listeOrder(_Customer.java:890)
>  
> Where am I wrong ?
>  
> Jérémy
>  
> Le 5 juin 2016 à 22:04, Chuck Hill <[email protected] 
> <mailto:[email protected]>> a écrit :
>  
> Remove the “class property” setting for the ModeTransport to Order.  You can 
> still use it for fetching.
>  
> Chuck
>  
>  
> From: <[email protected] 
> <mailto:[email protected]>> on 
> behalf of Jérémy DE ROYER <[email protected] 
> <mailto:[email protected]>>
> Date: Sunday, June 5, 2016 at 12:55 PM
> To: WebObjects-Dev <[email protected] 
> <mailto:[email protected]>>
> Subject: How to avoid expensive fetches in database when setting 
> to-one-relationship
>  
> Dear all, 
>  
> In our app, we have a one to many relationship between order and mode 
> transport
>  
> For each order, we set the mode transport using the method below :
>  
>  
>   public void setModeTransportRelationship(ModeTransport value) {
>     if (_CommandeClient.LOG.isDebugEnabled()) {
>       _CommandeClient.LOG.debug("updating modeTransport from " + 
> modeTransport() + " to " + value);
>     }
>     if (value == null) {
>     ModeTransport oldValue = modeTransport();
>     if (oldValue != null) {
>     removeObjectFromBothSidesOfRelationshipWithKey(oldValue, "modeTransport");
>       }
>     } else {
>     addObjectToBothSidesOfRelationshipWithKey(value, "modeTransport");
>     }
>   }
>  
>  
> Then, an objectWillChange() is fired for the mode transport… but the (not 
> wished) consequence is that every to many relationships from the mode 
> transport are fetched (even if we don’t call the associated method for the 
> mode transport). However, the objects associated with the to one 
> relationships are not fetched.
>  
> We observed the same behavior for the customer object when using the 
> setCustomerRelationship method of the ordre. The (bigger) problem is that the 
> customer object has dozen of to many relationships... fetched for nothing…
>  
> At the beginning we had few orders but now, we have to wait from 10 to 30 
> seconds until de saveChange is ended and that’s really not effective. More 
> than 90 % of this time is spent for fetching the to many relationship whereas 
> we just had to save the order values...
>  
> Any idea how to deal with theses not-wished-fetches ?
>  
> Jérémy
>  
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected] 
> <mailto:[email protected]>)
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com 
> <https://lists.apple.com/mailman/options/webobjects-dev/samuel%40samkar.com>
> 
> This email sent to [email protected] <mailto:[email protected]>
>  
>  
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/kenlists%40anderhome.com
> 
> This email sent to [email protected]

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to