Re: Horizontal inheritance mismatch between WebObjects 5.4 and 5.3 [ was: SQL generation doesn't conform to entity inheritance]
Re: Horizontal inheritance mismatch between WebObjects 5.4 and 5.3 [ was: SQL generation doesn't conform to entity inheritance]
- Subject: Re: Horizontal inheritance mismatch between WebObjects 5.4 and 5.3 [ was: SQL generation doesn't conform to entity inheritance]
- From: Dev WO <email@hidden>
- Date: Thu, 3 Feb 2011 08:17:41 +0100
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@hidden)
>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>
>>>>>>> This email sent to email@hidden
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>> Webobjects-dev mailing list (email@hidden)
>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>
>>>>>> This email sent to email@hidden
>>>>>
>>>>> --
>>>>> 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@hidden)
>>>> Help/Unsubscribe/Update your Subscription:
>>>>
>>>> This email sent to email@hidden
>>>>
>>>>
>>>
>>>
>>
>>
>>
>
>
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden