Hi Aaron, It is a mystery to me. I deleted the entity, saved the model, quit EOModeler, relaunched EOModeler, recreated the entity as a ERXGenericObject, added the derived attribute and it worked finely.
Then I changed the entity to a custom class and the derived attribute continued to work. So I added a second derived attribute to my custom class and it worked too. What a pity that I am having this intermittent problems, the productivity is way lower than it should be. Thanx for your help, Angelo 2014-03-23 14:11 GMT-03:00 Aaron Rosenzweig <aa...@chatnbike.com>: > Hi Angelo, > > There is something you and I are both missing. > > 1) There should be nothing magic about GenericRecord versus CustomObject. > All of my EOModels have CustomObjects for the reasons you noted (you want > to add helper methods, etc.). They also have both derived attributes but > more often regular attributes that use read / write format. I've never > received the error you encountered. > > 2) Maybe you are using a special MySQLPlugin that has some issue. I tried > searching for bits and pieces of the error message that was generated for > you but I can't find it in my code base. > > 3) It looks like your ReadFormat test was on the cusp of working. An > "IllegalStateException" is a java error meaning it never got to the point > of talking to the Database before throwing up its hands. A > "JDBCAdaptorException" means that the java knew what you were asking so > went ahead to query the DB but then had a problem. Double check that you > had the correct prototype (varchar) for the attribute in your EOModel. > Double check that the raw SQL would work. Turn on "EOAdaptor Debug" so you > can see the generated SQL and verify by hand that it makes sense. > > log4j.logger.er.transaction.adaptor.EOAdaptorDebugEnabled=DEBUG > > Sorry you're having trouble with this. > *Aaron Rosenzweig* / Chat 'n Bike <http://www.chatnbike.com> > *e:* aa...@chatnbike.com *t:* (301) 956-2319 [image: Chat 'n Bike] [image: > Chat 'n Bike] > > On Mar 23, 2014, at 11:58 AM, Ângelo Andrade Cirino <aacir...@gmail.com> > wrote: > > Hi Aaron, > > Thank you for your prompt answer. Unfortunately none of the suggestions > worked. > > 1) I can't find any combination of double or single apostrophe that will > work. A similar MySQL SELECT statement is as simple as this > > select Party.id as partyID, (case status > when 0 then 'Active' > when 1 then 'Inactive' > end) as fullStatus from Party; > > Even this simple derived attribute that returns a constant won't work > (from the plist entity file): > > { > columnName = fullStatus; > definition = "'Full Status'"; > name = fullStatus; > prototypeName = varchar16; > }, > > with the following error: > > IllegalStateException: sqlStringForAttribute: attempt to generate SQL for > attribute 'fullStatus' on entity 'Party' with undefined column name. You > must define a column name for this attribute before attempting a database > operation. > > 2) The read format option didn't work either since the attribute is an > integer number and the return value is a string. I attempted this format: > > if(%P,'Active','Inactive') > > and it resulted in this error: > > JDBCAdaptorException: Invalid value for getInt() - 'Inactive' > > However, this works just fine as a read format: > > if(%P,2*%P,5*%P) > > But I am stubborn and think that a derived attribute is a desirable > attribute. I would like to use it for more complex operations, for example > involving concatenation of strings in related entities. > > Anyway, trying to figure out what is happening, it occurred to me that my > Party entity is a custom class, so I tried a non-custom class with a simple > entity to see if the derived attribute would work. And it worked. My simple > tentative entity is this: > > { > attributes = ( > {columnName = code; name = code; prototypeName = intNumber; }, > { > columnName = fullStatus; > definition = "case code when 0 then 'Active' when 1 then > 'Inactive' end"; > isReadOnly = Y; > name = fullStatus; > prototypeName = varchar16; > userInfo = {"_EntityModeler" = {generateSource = NO; }; }; > }, > {allowsNull = N; name = id; prototypeName = id; } > ); > attributesUsedForLocking = (code, id); > className = "er.extensions.eof.ERXGenericRecord"; > classProperties = (code, fullStatus); > externalName = Status; > fetchSpecificationDictionary = {}; > name = Status; > primaryKeyAttributes = (id); > } > > But this isn't a solution for me, since my entity will have a lot of > business logic that demands a custom class. Perhaps I should set my Party > entity as a ERXGenericRecord and then subclass it to implement the business > logic. > > The question is, why does EO expect a column for a derived attribute for a > custom class and not for a ERXGenericRecord? > > By the way, the original Apple EOModeler User Guide doesn't state that a > derived attribute will not work for a custom class nor does the > documentation states that a derived attribute should be modeled for a > generic record. > > Angelo > > 2014-03-23 1:01 GMT-03:00 Aaron Rosenzweig <aa...@chatnbike.com>: > >> Hi Angelo, >> >> Couple things to try: >> >> 1) Remove the single apostrophes surrounding "status" and try again. It >> is possible that it isn't parsing properly... don't column names need to have >> "double apostrophes" ??? Perhaps MySQL is lax about that but still... Either >> use no apostrophe or use a "double apostrophe" meaning a single character >> the shift-apostrophe key. If it is a single apostrophe that is a String in >> SQL. >> >> 2) Try a different way. Remove all the code you have in the derived part >> and make this a normal EOAttribute. Put "STATUS" in there by itself. Now go >> to the "advanced" tab and type what you want in the "Read Format" and check >> the "read only" box. In the read format you want to use %P for your >> columnName so you'll want something like this: >> >> case %P when 0 then 'Active' when 1 then 'Inactive' end >> >> Honestly, I almost always use the #2 way and never the "derived" way >> because it is more flexible. I like the idea that I define the column in >> one box and in another I write something complex but refer to it with %P. >> >> Try it out and report back. >> *Aaron Rosenzweig* / Chat 'n Bike <http://www.chatnbike.com/> >> *e:* aa...@chatnbike.com *t:* (301) 956-2319 >> >> > > -- Ângelo Andrade Cirino aacir...@gmail.com 31-3494-8642 31-9303-0695 MSN aacir...@hotmail.com Skype aacirino
_______________________________________________ Do not post admin requests to the list. They will be ignored. Webobjects-dev mailing list (Webobjects-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com