[coldbox-4][ [cborm-1] nested model saves?

i have a handler that’s parsing thru a nested JSON request and saving records into 3 different models.

Campaign
Insertion
Insertion_Data

i thought of looping thru JSON for each Campaign, create the record, save it. create the child Insertion records, save all of them, create the child/grandchild insertion_data records, save all of them.

but it looks like nested transactions…don’t work as i imagine. i receive error:
An exception occurred when committing the transaction.The root cause of this exception was: java.lang.ClassCastException: coldfusion.runtime.TemplateProxy cannot be cast to java.lang.String. Code[BaseORMService line 1469]

i can comment out the save for Insertion and Insertion_Data and the campaign record saves just fine. but can’t get the insertion and insertion_data records to save.

`

Enter code here...

transaction {
for (var c=1;c<=ArrayLen(input.campaigns);c++) {
json_camp=input.campaigns[c];

param name=“json_camp.insertions” default="#[]#";

camp=campSvc.new();

campSvc.populate(target=camp, memento=json_camp);

campSvc.save(camp);

universal_id=camp.getuniversal_id();

for (var i=1;i<=ArrayLen(json_camp.insertions);i++) {
json_ins=input.campaigns[c].insertions[i];

ins=insSvc.new();

StructAppend(json_ins,ins_values);

insSvc.populate(target=ins,memento=json_ins);

//since we know the campaign universal_id, populate the insertions that belong to this campaign with that universal_id
ins.setuniversal_id(universal_id);

insSvc.save(ins);
insertion_id=ins.getInsertion_ID();

param name=“json_ins.insertion_element” default="#{}#";
json_ins_elem=json_ins.insertion_element;

for (ie in json_ins_elem) {
ins_elem=ins_ElemSvc.new();
insElem.setInsertion_ID(insertion_id);
insElem.setProduct_CD(ins.getProduct_CD());
insElem.setColumn_CD(ie);
insElem.setColumn_VALUE(json_ins.insertion_element[ie]);
insElem.setLast_MOD_TS(now);
insElem.setCreate_TS(now);

insSvc.save(insElem);

}

} // end loop thru json_camp.insertions
} // end loop thru input.campaigns

VARIABLES.response.addResult({
sf_oppt_id=camp.getsf_oppt_id(),
universal_id=camp.getuniversal_id()
});
//} //end transaction

`

`

`

I am guessing from the error, is that you’re trying to save a string in a db field not designed for a string.

What CF engine are you using (CF9, CF10, CF11, Railo, Lucee, etc), and can you show us the full stack trace.

Thanks!

~Brad

ColdBox Platform Evangelist
Ortus Solutions, Corp

E-mail: brad@coldbox.org
ColdBox Platform: http://www.coldbox.org
Blog: http://www.codersrevolution.com

hmm possibly. any suggestion on strategy for tracking down which column is offending? I got a list of 100 something columns in this model :slight_smile:

CF10

Stack Trace:

Stack Trace:

coldfusion.tagext.sql.TransactionTag$TransactionCommitException: An exception occurred when committing the transaction.
at coldfusion.tagext.sql.TransactionTag.commit(TransactionTag.java:418)
at coldfusion.tagext.sql.TransactionTag.txCommit(TransactionTag.java:814)
at coldfusion.tagext.sql.TransactionTag.callScriptMethod(TransactionTag.java:804)
at coldfusion.runtime.CFPage.TransactionCommit(CFPage.java:9976)
at cfBaseORMService2ecfc1244253093$func$TRANSACTIONED.runFunction(/home/tcprod/apache/webroot/coldbox/modules/cborm/models/BaseORMService.cfc:1469)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)
at cfBaseORMService2ecfc1244253093$funcSAVE.runFunction(/home/tcprod/apache/webroot/coldbox/modules/cborm/models/BaseORMService.cfc:793)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)
at coldfusion.runtime.SuperScope.invoke(SuperScope.java:18)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2373)
at cfActiveEntity2ecfc377590735$funcSAVE.runFunction(/home/tcprod/apache/webroot/coldbox/modules/cborm/models/ActiveEntity.cfc:75)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:655)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:444)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:414)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2432)
at cfSabreWeekendSpotlightService2ecfc1433642967$funcCREATECAMPINS.runFunction(/home/tcprod/apache/webroot/dmp/HANDLERS/SabreWeekendSpotlightService.cfc:272)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)
at cfEventHandler2ecfc83272062$func_PRIVATEINVOKER.runFunction(/home/tcprod/apache/webroot/coldbox/system/EventHandler.cfc:78)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:660)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:469)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2373)
at cfController2ecfc1304714872$funcINVOKER.runFunction(/home/tcprod/apache/webroot/coldbox/system/web/Controller.cfc:749)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)
at cfController2ecfc1304714872$func_RUNEVENT.runFunction(/home/tcprod/apache/webroot/coldbox/system/web/Controller.cfc:587)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2624)
at cfController2ecfc1304714872$funcRUNEVENT.runFunction(/home/tcprod/apache/webroot/coldbox/system/web/Controller.cfc:425)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:518)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:660)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:469)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2373)
at cfBootstrap2ecfc1719543229$funcPROCESSCOLDBOXREQUEST.runFunction(/home/tcprod/apache/webroot/coldbox/system/Bootstrap.cfc:197)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2659)
at cfApplication2ecfc1400277886$funcONREQUESTSTART.runFunction(/home/tcprod/apache/webroot/dmp/Application.cfc:1370)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:655)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:444)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:414)
at coldfusion.runtime.AppEventInvoker.invoke(AppEventInvoker.java:108)
at coldfusion.runtime.AppEventInvoker.onRequestStart(AppEventInvoker.java:278)
at coldfusion.filter.ApplicationFilter.invoke(ApplicationFilter.java:417)
at coldfusion.filter.MonitoringFilter.invoke(MonitoringFilter.java:40)
at coldfusion.filter.PathFilter.invoke(PathFilter.java:112)
at coldfusion.filter.ExceptionFilter.invoke(ExceptionFilter.java:94)
at coldfusion.filter.ClientScopePersistenceFilter.invoke(ClientScopePersistenceFilter.java:28)
at coldfusion.filter.BrowserFilter.invoke(BrowserFilter.java:38)
at coldfusion.filter.NoCacheFilter.invoke(NoCacheFilter.java:58)
at coldfusion.filter.GlobalsFilter.invoke(GlobalsFilter.java:38)
at coldfusion.filter.DatasourceFilter.invoke(DatasourceFilter.java:22)
at coldfusion.filter.CachingFilter.invoke(CachingFilter.java:62)
at coldfusion.CfmServlet.service(CfmServlet.java:219)
at coldfusion.bootstrap.BootstrapServlet.service(BootstrapServlet.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at coldfusion.monitor.event.MonitoringServletFilter.doFilter(MonitoringServletFilter.java:42)
at coldfusion.bootstrap.BootstrapFilter.doFilter(BootstrapFilter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:414)
at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:204)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.ClassCastException: coldfusion.runtime.TemplateProxy cannot be cast to java.lang.String
at org.hibernate.type.StringType.toString(StringType.java:67)
at org.hibernate.type.NullableType.nullSafeToString(NullableType.java:119)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:160)
at org.hibernate.type.NullableType.nullSafeSet(NullableType.java:133)
at org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2168)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2414)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2858)
at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:79)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:268)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:260)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:179)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1206)
at coldfusion.orm.hibernate.SessionWrapper.flush(SessionWrapper.java:176)
at coldfusion.orm.hibernate.HibernatePersistenceManager.onCommit(HibernatePersistenceManager.java:951)
at coldfusion.orm.hibernate.HibernatePersistenceManager$HibernateEventListener.onCommit(HibernatePersistenceManager.java:1100)
at coldfusion.tagext.sql.TransactionTag.fireOnCommit(TransactionTag.java:743)
at coldfusion.tagext.sql.TransactionTag.commit(TransactionTag.java:401)
… 123 more

I think you’re trying to save a CFC instance in a String field.

Thanks!

~Brad

ColdBox Platform Evangelist
Ortus Solutions, Corp

E-mail: brad@coldbox.org
ColdBox Platform: http://www.coldbox.org
Blog: http://www.codersrevolution.com

Krystar-

Sometimes this happens when you think you are getting a value and you
forget the parens. You might look for code that should say something like
this:

var x = y.getValue();

But instead says something like this:

var x = y.getValue;

-Cameron