I ran into this as well. To prevent trailing spaces from getting added, you can set er.extensions.ERXGenericRecord.shouldTrimSpaces=true. I just re-created my pull-request that excludes read-only attributes from being touched: <https://github.com/wocommunity/wonder/pull/495>
You'll obviously still have to get rid of existing trailing spaces in some other way. Fabian Am 11.10.2013 um 11:37 schrieb Markus Ruggiero: > A similar issue I had recently and there was another post one or two days ago > pointing to the same thing: trailing spaces! > > My case: > an attribute in the DB was set to be of type char. In the EOModel I had > specified varchar2 for the external datatype (this is Oracle). With char you > get a right space padded value back. This value was then used in a > ERD2WEditToOneRelationship popup. The value got used in the generated HTML > as the identifier for the selection. HTML strips all trailing spaces thus > upon submitting the data the selection never matched anything and so the > to-one relationship never got set. As this was an optional relationship no > validate for save error or anything similar showed up. It took quite some > time to first discover that there was an issue and again some/a lot more time > to find out what caused it. At the end the problem came from the customer > forgetting one essential step in a manual upgrade of his database. > > Morale of this story: > - Always check your SQL where clauses (and the values!) > - Always think of possible trailing spaces, not only in SQL clauses! > > ---markus-- > > > On 09.10.2013, at 20:43, Timothy Worman <li...@thetimmy.com> wrote: > >> +1 >> >> Turn on SQL logging and look at the exact sql that is being executed to >> update the row in the database. Test the “WHERE” clause in the update >> statement and see if it is as it should be for the row in the database. >> >> Tim >> UCLA GSE&IS >> >> On Oct 9, 2013, at 9:30 AM, John Huss <johnth...@gmail.com> wrote: >> >>> This is an optimistic locking error - the record was changed by another >>> user concurrently or you have precision differences (like in NSTimestamps) >>> that are causing the DB and memory to not match. >>> >>> >>> On Wed, Oct 9, 2013 at 8:59 AM, Jesse Tayler <jtay...@oeinc.com> wrote: >>> >>> what’s this? unknown source? caught my eye... >>> >>> at boise.app.components.PersonnelDetail.inviteUser(Unknown Source) >>> >>> yes, it does seem like maybe your model is out of sync, at least you’re not >>> getting much information back about it in the trace. >>> >>> did you turn on SQL debugging and generally check out that method >>> inviteUser? >>> >>> >>> >>> On Oct 9, 2013, at 9:52 AM, Paul Yu <p...@mac.com> wrote: >>> >>>> Greetings >>>> >>>> I'm getting errors like this in my production system. What should I be >>>> looking for to fix these type of issues? I saw a previous post that the >>>> EOModel may be out of synch with the DB? >>>> >>>> Thanks in advance... >>>> >>>> Paul >>>> >>>> *** UNCAUGHT EXCEPTION *** >>>> com.webobjects.eoaccess.EOGeneralAdaptorException: >>>> updateValuesInRowDescribedByQualifier >>>> er.extensions.jdbc.ERXJDBCAdaptor$Channel method failed to update row in >>>> database >>>> at >>>> com.webobjects.eoaccess.EODatabaseContext._exceptionWithDatabaseContextInformationAdded(EODatabaseContext.java:4504) >>>> at >>>> com.webobjects.eoaccess.EODatabaseContext.performChanges(EODatabaseContext.java:6216) >>>> at >>>> com.webobjects.eocontrol.EOObjectStoreCoordinator.saveChangesInEditingContext(EOObjectStoreCoordinator.java:376) >>>> at >>>> com.webobjects.eocontrol.EOEditingContext.saveChanges(EOEditingContext.java:3192) >>>> at er.extensions.eof.ERXEC._saveChanges(ERXEC.java:1176) >>>> at er.extensions.eof.ERXEC.saveChanges(ERXEC.java:1099) >>>> at boise.app.components.PersonnelDetail.inviteUser(Unknown Source) >>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>> at >>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >>>> at >>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>> at >>>> com.webobjects.foundation.NSKeyValueCoding$ValueAccessor$1.methodValue(NSKeyValueCoding.java:636) >>>> at >>>> com.webobjects.foundation.NSKeyValueCoding$_MethodBinding.valueInObject(NSKeyValueCoding.java:1134) >>>> at >>>> com.webobjects.foundation.NSKeyValueCoding$DefaultImplementation.valueForKey(NSKeyValueCoding.java:1324) >>>> at >>>> com.webobjects.appserver.WOComponent.valueForKey(WOComponent.java:1736) >>>> at >>>> com.webobjects.foundation.NSKeyValueCoding$Utility.valueForKey(NSKeyValueCoding.java:447) >>>> at >>>> com.webobjects.foundation.NSKeyValueCodingAdditions$DefaultImplementation.valueForKeyPath(NSKeyValueCodingAdditions.java:212) >>>> at >>>> com.webobjects.appserver.WOComponent.valueForKeyPath(WOComponent.java:1804) >>>> at boise.components.BoiseComponent.valueForKeyPath(Unknown Source) >>>> at >>>> com.webobjects.appserver._private.WOKeyValueAssociation.valueInComponent(WOKeyValueAssociation.java:50) >>>> at >>>> er.extensions.components.ERXComponentUtilities.valueForBinding(ERXComponentUtilities.java:539) >>>> at >>>> er.extensions.components.ERXDynamicElement.valueForBinding(ERXDynamicElement.java:161) >>>> at er.ajax.AjaxSubmitButton.handleRequest(AjaxSubmitButton.java:330) >>>> at er.ajax.AjaxSubmitButton.invokeAction(AjaxSubmitButton.java:320) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> er.extensions.components.conditionals.ERXWOConditional.invokeChildrenAction(ERXWOConditional.java:116) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> er.extensions.components.conditionals.ERXWOConditional.invokeAction(ERXWOConditional.java:108) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> er.extensions.components.conditionals.ERXWOConditional.invokeChildrenAction(ERXWOConditional.java:116) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> er.extensions.components.conditionals.ERXWOConditional.invokeAction(ERXWOConditional.java:108) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> er.extensions.components._private.ERXWOForm.invokeAction(ERXWOForm.java:218) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at er.ajax.AjaxDynamicElement.invokeAction(AjaxDynamicElement.java:50) >>>> at >>>> er.ajax.AjaxUpdateContainer.invokeAction(AjaxUpdateContainer.java:83) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) >>>> at >>>> er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168) >>>> at >>>> com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> er.extensions.components.conditionals.ERXWOConditional.invokeChildrenAction(ERXWOConditional.java:116) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> er.extensions.components.conditionals.ERXWOConditional.invokeAction(ERXWOConditional.java:108) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at er.ajax.AjaxDynamicElement.invokeAction(AjaxDynamicElement.java:50) >>>> at >>>> er.ajax.AjaxUpdateContainer.invokeAction(AjaxUpdateContainer.java:83) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> com.webobjects.appserver._private.WOComponentContent.invokeAction(WOComponentContent.java:38) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at er.ajax.AjaxDynamicElement.invokeAction(AjaxDynamicElement.java:50) >>>> at >>>> er.ajax.AjaxUpdateContainer.invokeAction(AjaxUpdateContainer.java:83) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) >>>> at >>>> er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168) >>>> at >>>> com.webobjects.appserver._private.WOComponentReference.invokeAction(WOComponentReference.java:127) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeChildrenAction(WODynamicGroup.java:105) >>>> at >>>> com.webobjects.appserver._private.WODynamicGroup.invokeAction(WODynamicGroup.java:115) >>>> at >>>> com.webobjects.appserver.WOComponent.invokeAction(WOComponent.java:1079) >>>> at >>>> er.extensions.components.ERXComponent.invokeAction(ERXComponent.java:168) >>>> at com.webobjects.appserver.WOSession.invokeAction(WOSession.java:1357) >>>> at >>>> com.webobjects.appserver.WOApplication.invokeAction(WOApplication.java:1745) >>>> at >>>> er.extensions.appserver.ajax.ERXAjaxApplication.invokeAction(ERXAjaxApplication.java:119) >>>> at >>>> er.extensions.appserver.ERXApplication.invokeAction(ERXApplication.java:1988) >>>> at >>>> com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedPage(WOComponentRequestHandler.java:206) >>>> at >>>> com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedSession(WOComponentRequestHandler.java:298) >>>> at >>>> com.webobjects.appserver._private.WOComponentRequestHandler._dispatchWithPreparedApplication(WOComponentRequestHandler.java:332) >>>> at >>>> com.webobjects.appserver._private.WOComponentRequestHandler._handleRequest(WOComponentRequestHandler.java:369) >>>> at >>>> com.webobjects.appserver._private.WOComponentRequestHandler.handleRequest(WOComponentRequestHandler.java:445) >>>> at er.ajax.AjaxRequestHandler.handleRequest(AjaxRequestHandler.java:20) >>>> at >>>> com.webobjects.appserver.WOApplication.dispatchRequest(WOApplication.java:1687) >>>> at >>>> er.extensions.appserver.ERXApplication.dispatchRequestImmediately(ERXApplication.java:2109) >>>> at >>>> er.extensions.appserver.ERXApplication.dispatchRequest(ERXApplication.java:2074) >>>> at boise.appserver.BoiseApplication.dispatchRequest(Unknown Source) >>>> at >>>> com.webobjects.appserver._private.WOWorkerThread.runOnce(WOWorkerThread.java:144) >>>> at >>>> com.webobjects.appserver._private.WOWorkerThread.run(WOWorkerThread.java:226) >>>> at java.lang.Thread.run(Thread.java:662) >>>> _______________________________________________ >>>> 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/jtayler%40oeinc.com >>>> >>>> This email sent to jtay...@oeinc.com >>> >>> >>> _______________________________________________ >>> 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/johnthuss%40gmail.com >>> >>> This email sent to johnth...@gmail.com >>> >>> _______________________________________________ >>> 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/lists%40thetimmy.com >>> >>> This email sent to li...@thetimmy.com >> >> >> _______________________________________________ >> 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/mailinglists%40kataputt.com >> >> This email sent to mailingli...@kataputt.com > > > _______________________________________________ > 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/lists.fabian%40e-lumo.com > > This email sent to lists.fab...@e-lumo.com _______________________________________________ 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