Hi,
I'm trying to integrate SGWT EE with our application and I seem to have hit a little snag. Turns out all our DB tables have a primary key named "id". The name remains the same throughout the 300+ tables.
Now I'm trying to fire a fetch query with a criteria like so
My criteria here however seems to get ignored:
I've also tried to write my code like so:
but that throws another exception:
Here are my .ds.xml files:
Is there a way I can get around this without having to rename every primary key column in my DB and associated JPA entities?
I'm trying to integrate SGWT EE with our application and I seem to have hit a little snag. Turns out all our DB tables have a primary key named "id". The name remains the same throughout the 300+ tables.
Now I'm trying to fire a fetch query with a criteria like so
Code:
DataSource leadSubDs = DataSource.get("LeadSubscribedUsers"); Criteria cr = new Criteria(); cr.addCriteria("leads.id", Long.valueOf(id)); cr.addCriteria("users", userId); leadSubDs.fetchData(cr, new DSCallback() { public void execute(DSResponse response, Object rawData, DSRequest request) { Record[] responseData = response.getData(); for(Record record: responseData){ String eventTypeCode = ""; String actionTypeCode = ""; Object obj = JSOHelper.convertToJava(record.getJsObj()); ....
Code:
criteria:{ "leads.id":10, users:1 }, operationConfig:{ dataSource:"LeadSubscribedUsers", operationType:"fetch", textMatchStyle:"exact" }, appID:"builtinApplication", operation:"LeadSubscribedUsers_fetch", oldValues:{ "leads.id":10, users:1 } } === 2014-09-03 13:04:32,925 [ec-7] INFO IDACall - Performing 1 operation(s) === 2014-09-03 13:04:32,926 [ec-7] DEBUG ISCKeyedObjectPool - Borrowing object for 'leads' === 2014-09-03 13:04:32,926 [ec-7] WARN DSRequest - In criteria, definition 'leads.id' refers to a field name ('id') that is already declared on this dataSource ('LeadSubscribedUsers'). Ignoring this criteria entry.
Code:
Criteria cr = new Criteria(); cr.addCriteria("leads", Long.valueOf(id));
Code:
=== 2014-09-03 14:13:13,207 [ec-2] DEBUG ISCKeyedObjectPool - Borrowing object for 'LeadSubscribedUsers' === 2014-09-03 14:13:13,208 [ec-2] DEBUG RPCManager - Request #1 (DSRequest) payload: { criteria:{ leads:10, users:1 }, operationConfig:{ dataSource:"LeadSubscribedUsers", operationType:"fetch", textMatchStyle:"exact" }, appID:"builtinApplication", operation:"LeadSubscribedUsers_fetch", oldValues:{ leads:10, users:1 } } === 2014-09-03 14:13:13,208 [ec-2] INFO IDACall - Performing 1 operation(s) === 2014-09-03 14:13:13,208 [ec-2] DEBUG DeclarativeSecurity - Processing security checks for DataSource null, field null === 2014-09-03 14:13:13,208 [ec-2] DEBUG DeclarativeSecurity - DataSource LeadSubscribedUsers is not in the pre-checked list, processing... === 2014-09-03 14:13:13,208 [ec-2] DEBUG AppBase - [builtinApplication.LeadSubscribedUsers_fetch] No userTypes defined, allowing anyone access to all operations for this application === 2014-09-03 14:13:13,209 [ec-2] DEBUG AppBase - [builtinApplication.LeadSubscribedUsers_fetch] No public zero-argument method named '_LeadSubscribedUsers_fetch' found, performing generic datasource operation === 2014-09-03 14:13:13,209 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Creating EntityManager and starting transaction. === 2014-09-03 14:13:13,217 [ec-2] DEBUG DSRequest - [builtinApplication.LeadSubscribedUsers_fetch] Clobbering existing FreeResourcesHandler of type 'com.isomorphic.jpa.JPA2DataSource' with a 'com.isomorphic.jpa.JPA2DataSource' === 2014-09-03 14:13:13,217 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Executing fetch. === 2014-09-03 14:13:13,218 [ec-2] DEBUG ISCKeyedObjectPool - [builtinApplication.LeadSubscribedUsers_fetch] Borrowing object for 'Leads' === 2014-09-03 14:13:13,218 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Marking transaction for roll back. === 2014-09-03 14:13:13,218 [ec-2] DEBUG JPADataSource - [builtinApplication.LeadSubscribedUsers_fetch] Got exception while executing. Transaction will be rolled back. java.lang.ClassCastException: java.lang.Long cannot be cast to java.util.Map at com.isomorphic.jpa.JPADataSource.createQuery(JPADataSource.java:1910) at com.isomorphic.jpa.JPADataSource.executeFetch(JPADataSource.java:691) at com.isomorphic.datasource.DataSource.execute(DataSource.java:1517) at com.isomorphic.jpa.JPADataSource.execute(JPADataSource.java:651) at com.isomorphic.application.AppBase.executeDefaultDSOperation(AppBase.java:723) at com.isomorphic.application.AppBase.executeAppOperation(AppBase.java:658) at com.isomorphic.application.AppBase.execute(AppBase.java:491) at com.isomorphic.datasource.DSRequest.execute(DSRequest.java:2534) at com.isomorphic.servlet.IDACall.handleDSRequest(IDACall.java:215) at com.isomorphic.servlet.IDACall.processRPCTransaction(IDACall.java:172) at com.isomorphic.servlet.IDACall.processRequest(IDACall.java:137) at com.isomorphic.servlet.IDACall.doPost(IDACall.java:73) at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) at com.isomorphic.servlet.BaseServlet.service(BaseServlet.java:152) at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.jboss.solder.servlet.exception.CatchExceptionFilter.doFilter(CatchExceptionFilter.java:62) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.jboss.solder.servlet.event.ServletEventBridgeFilter.doFilter(ServletEventBridgeFilter.java:74) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.isomorphic.servlet.CompressionFilter.doFilter(CompressionFilter.java:260) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:146) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:176) at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:394) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.bmf.servlet.filters.ReferralFilter.doFilter(ReferralFilter.java:59) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at com.bmf.servlet.filters.LoggerFilter.doFilter(LoggerFilter.java:50) 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:222) at org.apache.catalina.core.StandardContextValve.__invoke(StandardContextValve.java:123) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.__invoke(StandardHostValve.java:171) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1008) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722)
Here are my .ds.xml files:
Code:
<DataSource ID="LeadSubscribedUsers" serverType="jpa" serverConstructor="com.isomorphic.jpa.JPA2DataSource" dropExtraFields="true" beanClassName="com.bmf.domain.LeadSubscribedUsers" schemaBean="com.bmf.domain.LeadSubscribedUsers"> <fields> <field name="id"/> <field name="eventTypes" type="EventTypes" foreignKey="EventTypes.id"/> <field name="actionTypes" type="ActionTypes" foreignKey="ActionTypes.id"/> <field name="leads" type="Leads" foreignKey="Leads.id"/> <field name="users" type="Users" foreignKey="Users.id"/> </fields> </DataSource>
Code:
<DataSource allowAdvancedCriteria="true" dropExtraFields="true" beanClassName="com.bmf.domain.Leads" ID="Leads" entityName="com.bmf.domain.Leads" serverType="jpa" > <fields> <field hidden="true" primaryKey="true" name="id" length="255" canEdit="false" required="false" type="sequence"></field> <field name="lastCommentAt" length="19" canEdit="true" required="true" type="datetime"></field> <field name="priorityPoints" length="255" canEdit="true" required="true" type="integer"></field> <field name="receivedAt" length="19" canEdit="true" required="true" type="datetime"></field> <field name="updatedAt" length="19" canEdit="true" required="true" type="datetime"></field> </fields> </DataSource>
Comment