cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Gentry" <blackn...@gmail.com>
Subject Re: help on relationship
Date Mon, 22 Jan 2007 13:46:43 GMT
I'm not at all familiar with Click or the CayenneForm class it
provides.  A quick Google search lead me to this:

* Fixed CayenneForm duplicate insert bug. This issue was identified by
Bob Schellink [63].  (Version 0.19 - 8th April 2006)

Are you using at least version 0.19 of Click?  I did look at the
CayenneForm JavaDoc page and it doesn't look like you have to
create/register your Products object since I think the CayenneForm
will automatically do that for you.  Also, it looks like you may want
to call saveChanges() on the CayenneForm instead of commitChanges() on
the DataContext.

Thanks!

/dev/mrg


On 1/21/07, Jun Bondoy <dvbondoy@gmail.com> wrote:
> Hi Michael,
>
> Thanks for the quick response..based on your given code..this is what i did
> with Click and Cayenne..luckily Click have a PropertySelect that supports
> Cayenne to-one relationship..so what im trying to test now is the
> to-many..the only option ive got is to do it manually...can you take a quick
> look with my short code to see what im missing..ive got a SQLException
> error, Duplicate Entry..it seems like Cayenne save a new instance of
> Categories which i dont intend to...thanks in advance.and hey im looking
> forward for a Cayenne Books..hope you guys release one..im willing to buy
> one..
>
> *******CODES***************************
> public class ManageProducts extends BorderPage {
>
>     public CayenneForm form = new CayenneForm("form",Products.class);
>     private QuerySelect query;
>
>     public ManageProducts(){
>
>         form.add(new TextField("name"));
>         form.add(new TextField("serial"));
>
>         query = new QuerySelect("categories.name");
>         query.setQueryValueLabel("FindCategories", "name", "name");
>         form.add(query);
>
>         form.add(new Submit("save"," Save ",this,"onSaveClick"));
>     }
>
>     public boolean onSaveClick(){
>         if(form.isValid()){
>             Categories category = getCategoryService().findCategoryByName(
> query.getValue());
>             Products products = (Products) form.getDataObject();
>
>             products.setCategories(category);
>
>             if(category != null){
>                 getDataContext().commitChanges();
>                 form.clearValues();
>                 return true;
>             } else {
>                 return false;
>             }
>         } else {
>             return false;
>         }
>
>     }
>
> }
>
> ************ERRORS******************************
>
> [Click] [debug] Form -> Products.name : preofdkjfk
> [Click] [debug] Form -> Products.serial : 122837
> [Click] [debug] Form -> Products.categories.name : Category 2
> [Click] [error] handleException:
> org.objectstyle.cayenne.CayenneRuntimeException: [v.1.2.1 September 19 2006]
> Commit Exception
>     at org.objectstyle.cayenne.access.DataContext.flushToParent(
> DataContext.java:1289)
>     at org.objectstyle.cayenne.access.DataContext.commitChanges(
> DataContext.java:1165)
>     at org.russagri.page.inventory.ManageProducts.onSaveClick(
> ManageProducts.java:40)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>     at java.lang.reflect.Method.invoke(Unknown Source)
>     at net.sf.click.util.ClickUtils.invokeListener(ClickUtils.java:881)
>     at net.sf.click.control.Field.invokeListener(Field.java:1097)
>     at net.sf.click.control.Submit.onProcess(Submit.java:207)
>     at net.sf.click.control.Form.onProcess(Form.java:1833)
>     at net.sf.click.extras.cayenne.CayenneForm.onProcess(CayenneForm.java
> :467)
>     at net.sf.click.ClickServlet.processPage(ClickServlet.java:484)
>     at net.sf.click.ClickServlet.handleRequest(ClickServlet.java:357)
>     at net.sf.click.ClickServlet.doPost(ClickServlet.java:302)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
>     at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:252)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
>     at net.sf.click.extras.filter.CompressionFilter.doFilter(
> CompressionFilter.java:209)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
>     at net.sf.click.extras.cayenne.DataContextFilter.doFilter(
> DataContextFilter.java:125)
>     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:202)
>     at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:173)
>     at org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:213)
>     at org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:178)
>     at org.apache.catalina.core.StandardHostValve.invoke(
> StandardHostValve.java:126)
>     at org.apache.catalina.valves.ErrorReportValve.invoke(
> ErrorReportValve.java:105)
>     at org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:107)
>     at org.apache.catalina.connector.CoyoteAdapter.service(
> CoyoteAdapter.java:148)
>     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
> :869)
>     at
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection
> (Http11BaseProtocol.java:664)
>     at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(
> PoolTcpEndpoint.java:527)
>     at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(
> LeaderFollowerWorkerThread.java:80)
>     at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(
> ThreadPool.java:684)
>     at java.lang.Thread.run(Unknown Source)
> Caused by: java.sql.SQLException: Duplicate entry 'Category 2' for key 2
>     at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975)
>     at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
>     at com.mysql.jdbc.ServerPreparedStatement.serverExecute(
> ServerPreparedStatement.java:1125)
>     at com.mysql.jdbc.ServerPreparedStatement.executeInternal(
> ServerPreparedStatement.java:677)
>     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
> :1357)
>     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
> :1274)
>     at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java
> :1259)
>     at
> org.objectstyle.cayenne.access.jdbc.BatchAction.runAsIndividualQueries(
> BatchAction.java:224)
>     at org.objectstyle.cayenne.access.jdbc.BatchAction.performAction(
> BatchAction.java:117)
>     at org.objectstyle.cayenne.access.DataNodeQueryAction.runQuery(
> DataNodeQueryAction.java:95)
>     at org.objectstyle.cayenne.access.DataNode.performQueries(DataNode.java
> :309)
>     at org.objectstyle.cayenne.access.DataDomainFlushAction.runQueries(
> DataDomainFlushAction.java:255)
>     at org.objectstyle.cayenne.access.DataDomainFlushAction.flush(
> DataDomainFlushAction.java:177)
>     at org.objectstyle.cayenne.access.DataDomain.onSyncFlush(DataDomain.java
> :830)
>     at org.objectstyle.cayenne.access.DataDomain$2.transform(DataDomain.java
> :801)
>     at org.objectstyle.cayenne.access.DataDomain.runInTransaction(
> DataDomain.java:856)
>     at org.objectstyle.cayenne.access.DataDomain.onSync(DataDomain.java:798)
>     at org.objectstyle.cayenne.access.DataContext.flushToParent(
> DataContext.java:1261)
>     ... 36 more
> [Click] [info ] renderTemplate: /click/error.htm - 15 ms
> [Click] [info ] handleRequest:  /inventory/manage-products.htm - 1047 ms
> [Click] [debug] Uncommitted data objects:
> [Click] [debug]    {<ObjectId:Categories, TEMP:0000017ADC440001>; new;
> [products=>(..); name=>Category 2]}
> [Click] [debug]    {<ObjectId:Products, TEMP:0000007ADC060001>; new;
> [categories=>{<ObjectId:Categories, id=201>}; name=>preofdkjfk;
> serial=>122837]}
>
>
> On 1/20/07, Michael Gentry <blacknext@gmail.com> wrote:
> >
> > When you model the relationships in Cayenne Modeler and then generate
> > the Java classes, it'll create set* methods and addTo* methods for
> > your relationships.
> >
> > So in your case, something similar to this should work:
> >
> > Category category = [code to get your Category object];
> > Product product = dataContext.createAndRegisterNewObject(Product.class);
> > product.setCategory(category);
> > ...
> >
> > /dev/mrg
> >
> >
> > On 1/20/07, Jun Bondoy <dvbondoy@gmail.com> wrote:
> > > Hi list,
> > >
> > > can somebody help me please. i have a products object with to-one
> > > relationship with my categories object. what i want to do is create a
> > new
> > > products and use an existing categories object. below are the steps i
> > did...
> > >
> > > 1. lookup for my existing categories via query
> > > 2. create a new product object
> > >
> > > how can i set the product object on the categories object before i
> > commit?
> > >
> > > thanks in advance..
> > >
> > > Best Regards
> > > -jun
> > >
> > >
> >
>
>

Mime
View raw message