Hi David,

> Hi Xavier,
> 
> Hmmm. As a complete aside to the SQL generation issue, are you _sure_ you 
> need inheritance for this?
> 
> In your app, what happens if an employee wants to buy something from you? 
> They can't be both a customer and an employee. Don't make the mistake of 
> thinking you can change change which class a person is.
> 
> Using inheritance in this type of situation is almost always the wrong way to 
> go. I'd probably model this as a person being able to have multiple roles and 
> you'd get all the customers by doing something along the lines of "Get all 
> person objects that have relationship to the customer type." In Wonder: 
> 
> NSArray<Person> customers = Person.fetchAll(ec, 
> Person.ROLES.contains(Role.customerRole()));
> 
> You can then have different behaviors for different roles by using delegates 
> that encapsulate the role-specific behaviors. Replace the idea of IS-A 
> (person) with HAS-A (role).
> 
> Much more flexible, and it gets rid of Inheritance in your EOModel.

I totally agree that this specific example is not really interesting, but it 
was just to showcase the issue.
But I do use quit a lot horizontal inheritance, for products in an online 
store, etc. I just can't get rid of them. Some projects are just in maintenance 
mode, we won't rewrite them at such a lower level. New projects are using less 
horizontal inheritance, but still some;) So I have to figure out how to fix 
this "5.4 feature";)

Xavier

> 
> Dave
> 
> 
> On Feb 2, 2011, at 3:42 PM, Dev WO wrote:
> 
>> Sure Dave, here they are:
>> 
>> parent entity
>> {
>>   attributes = (
>>       {allowsNull = N; name = id; prototypeName = id; }, 
>>       {allowsNull = Y; columnName = name; name = name; prototypeName = 
>> varchar255; }
>>   ); 
>>   attributesUsedForLocking = (id); 
>>   className = "com.anazys.tempFrameworkWonder54.Core"; 
>>   classProperties = (name); 
>>   fetchSpecificationDictionary = {}; 
>>   isAbstractEntity = Y; 
>>   name = Core; 
>>   primaryKeyAttributes = (id); 
>> }
>> 
>> subclass Employee
>> {
>>   attributes = (
>>       {allowsNull = N; name = id; prototypeName = id; }, 
>>       {allowsNull = Y; columnName = name; name = name; prototypeName = 
>> varchar255; }
>>   ); 
>>   attributesUsedForLocking = (id); 
>>   className = "com.anazys.tempFrameworkWonder54.Employee"; 
>>   classProperties = (name); 
>>   externalName = Employee; 
>>   fetchSpecificationDictionary = {}; 
>>   name = Employee; 
>>   parent = Core; 
>>   primaryKeyAttributes = (id); 
>> }
>> 
>> subclass Customer
>> {
>>   attributes = (
>>       {allowsNull = N; name = id; prototypeName = id; }, 
>>       {allowsNull = Y; columnName = name; name = name; prototypeName = 
>> varchar255; }
>>   ); 
>>   attributesUsedForLocking = (id); 
>>   className = "com.anazys.tempFrameworkWonder54.Customer"; 
>>   classProperties = (name); 
>>   externalName = Customer; 
>>   fetchSpecificationDictionary = {}; 
>>   name = Customer; 
>>   parent = Core; 
>>   primaryKeyAttributes = (id); 
>> }
> 
> 
>> 
>> I could edit the code for the SQL when generating the database, but the 
>> issue is really in production, if I update the app, it will start to 
>> generate pk based on the sub-entity, and I will end up with duplicate pks 
>> between various sub-classes.
>> So the SQL generated by EntityModeler is just a way to check if it's going 
>> to break the current app, not really for that specific action.
>> 
>> Xavier
>> 
>> 
>> On 2 févr. 2011, at 19:05, David Avendasora wrote:
>> 
>>> Hi Xavier,
>>> 
>>> Can you paste the .plist files for the three Entities (the super and two 
>>> subclasses) into this email? I'm suspecting that there maybe something 
>>> wrong with the way it is modeled...
>>> 
>>> What if you manually create the database tables and the sequence instead of 
>>> letting EntityModeler generate the SQL for them? Does creating and saving 
>>> new instances of the subclasses work? What I'm trying to figure out is if 
>>> this is a problem with just the Create Table statements generated by the 
>>> plugin, or a more fundamental problem with how EOF is using Horizontal 
>>> Inheritance.
>>> 
>>> Dave
>>> 
>>> On Feb 2, 2011, at 12:46 PM, Dev WO wrote:
>>> 
>>>> Hello Chuck,
>>>> 
>>>> With JavaERJDBCAdaptor or the default JavaJDBCAdaptor, the result is the 
>>>> same, it doesn't conform to the inheritance modeled in EntityModeler.
>>>> I've got to check into ERExtensions if I can find something.
>>>> 
>>>> I understand not everyone is using Horizontal Inheritance, but I must not 
>>>> be the only one trying to figure out what's going on with 5.4.
>>>> 
>>>> Just to make sure, I've created a new Wonder framework, created only an 
>>>> abstract entity and 2 sub-entities with horizontal inheritance, and the 
>>>> generated SQL is not correct, it doesn't conform to the modeled 
>>>> inheritance by requesting sequence for the pk for each sub-entity instead 
>>>> of the abstract parent sequence.
>>>> It looks to me this is a bug, I'm not 100% sure it's in Wonder or 
>>>> Webobjects though. Should I fill a Jira for this? I don't think this could 
>>>> be qualified as a regression as I don't even know if this bug was ever in 
>>>> 5.3.
>>>> 
>>>> Thanks for your help,
>>>> 
>>>> Xavier
>>>> 
>>>> On 1 févr. 2011, at 20:24, Chuck Hill wrote:
>>>> 
>>>>> Hi Xavier,
>>>>> 
>>>>> 
>>>>> On Feb 1, 2011, at 12:42 AM, Dev WO wrote:
>>>>> 
>>>>>> I'm still trying to figure out what's happening...
>>>>>> What I have found so far is that:
>>>>>> 
>>>>>> If I'm doing:
>>>>>> -latest 5.4 wonder frameworks except JavaERJDBCAdaptor.framework and 
>>>>>> PostgresqlPlugIn.framework from 5.3
>>>>>> -binding to WebObjects 5.4 (using 
>>>>>> wo.system.frameworks=/System/Library/Frameworks/WebObjects54 in my 
>>>>>> wolips.properties)
>>>>>> => SQL generation doesn't conform to entity inheritance
>>>>>> 
>>>>>> If I'm doing:
>>>>>> -latest 5.4 wonder frameworks
>>>>>> -binding to WebObjects 5.4 (using 
>>>>>> wo.system.frameworks=/System/Library/Frameworks/WebObjects54 in my 
>>>>>> wolips.properties)
>>>>>> => SQL generation doesn't conform to entity inheritance
>>>>> 
>>>>> Try it without JavaERJDBCAdaptor.framework at all (just use 
>>>>> JavaJDBCAdaptor.framework)
>>>>> 
>>>>> 
>>>>>> if I'm doing:
>>>>>> -lastest 5.3 wonder frameworks
>>>>>> -binding to WebObjects 5.3 (using 
>>>>>> wo.system.frameworks=/System/Library/Frameworks/WebObjects53 in my 
>>>>>> wolips.properties)
>>>>>> => I've got the correct behavior which is inheritance enforced when 
>>>>>> generating the SQL in EntityModeler.
>>>>>> 
>>>>>> So I can say there is something different regarding horizontal 
>>>>>> inheritance between WebObjects 5.3 and WebObjects 5.4. Based on the 
>>>>>> first case scenario, it seems the difference occurs within WebObjects 
>>>>>> frameworks (but maybe something else is involved in the Wonder 
>>>>>> frameworks in addition to the 2 I keept from 5.3 in the first case).
>>>>>> 
>>>>>> I don't know if this is to be considered a bug or if there's just 
>>>>>> something I should add/edit to make horizontal inheritance works under a 
>>>>>> complete 5.4 setup, but the fact that I couldn't find the same issue on 
>>>>>> the list makes me feel like the issue could at least be fixed on my side.
>>>>> 
>>>>> It might be that few people are using Horizontal Inheritance.    I have 
>>>>> not noticed any problem with Single Table Inheritance.
>>>>> 
>>>>> 
>>>>>> Any pointer about where to look at to ensure proper horizontal 
>>>>>> inheritance SQL generation under 5.4?
>>>>> 
>>>>> Based on your evidence, I'd search for "primary" in ERExtensions.  If 
>>>>> nothing else, that will at least show you were in EOF the PK generation  
>>>>> happens.
>>>>> 
>>>>> 
>>>>> Chuck
>>>>> 
>>>>> 
>>>>>> On 31 janv. 2011, at 18:57, Dev WO wrote:
>>>>>> 
>>>>>>> Hello,
>>>>>>> 
>>>>>>> I don't really know where the issue come from, but here's what's 
>>>>>>> happening and what I've already tried to fix it (without a solution so 
>>>>>>> far).
>>>>>>> 
>>>>>>> I'm using Eclipse 3.6.1.M20100909 cocoa 64
>>>>>>> WOLips 3.6.6215
>>>>>>> PostgreSQL 8.4
>>>>>>> WO 5.4.3
>>>>>>> 
>>>>>>> My previous setup was WO 5.3.3 with the previous major version of 
>>>>>>> Eclipse (Carbon) and WOLips. The following behavior wasn't happening in 
>>>>>>> this setup.
>>>>>>> 
>>>>>>> I've got an Abstract entity A and a couple sub-entities, let's say 
>>>>>>> SubA1 and SubA2.
>>>>>>> In the previous setup, when I generated the SQL for them, they were 
>>>>>>> both correctly referring to A_seq for their primary key generation (in 
>>>>>>> EntityModeler when generating SQL and while the app was running).
>>>>>>> Now they are referring to SubA1_seq and SubA2_seq (in EntityModeler and 
>>>>>>> while the app is running) which breaks the entire application by 
>>>>>>> providing pk that might be already taken by the other sub-entity...
>>>>>>> 
>>>>>>> I first thought it could come from the PosgreSQL plugin framework, but 
>>>>>>> after putting back my previous one, the issue is still there (cleaned 
>>>>>>> the project after "updating" the framework).
>>>>>>> 
>>>>>>> I'll will update WOLips right away to check if it changes anything, but 
>>>>>>> if anyone has an idea on what might cause this issue and even better 
>>>>>>> how to fix it to respect entity inheritance, that would be really nice:)
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> 
>>>>>>> Xavier
>>>>>>> _______________________________________________
>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>> Webobjects-dev mailing list      ([email protected])
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/webobjects%40anazys.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:
>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>>>>>> 
>>>>>> This email sent to [email protected]
>>>>> 
>>>>> -- 
>>>>> Chuck Hill             Senior Consultant / VP Development
>>>>> 
>>>>> Practical WebObjects - for developers who want to increase their overall 
>>>>> knowledge of WebObjects or who are trying to solve specific problems.    
>>>>> http://www.global-village.net/products/practical_webobjects
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Webobjects-dev mailing list      ([email protected])
>>>> Help/Unsubscribe/Update your Subscription:
>>>> http://lists.apple.com/mailman/options/webobjects-dev/webobjects%40avendasora.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:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to