You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@cayenne.apache.org by Jun Bondoy <dv...@gmail.com> on 2007/01/20 14:02:06 UTC
help on relationship
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
Re: help on relationship
Posted by Jun Bondoy <dv...@gmail.com>.
Thank you all for the help...im having a good grip already with
Cayenne..just confusing at first..
Best Regards
jun
On 1/23/07, Malcolm Edgar <ma...@gmail.com> wrote:
>
> Hi All,
>
> I think Jun has sorted out this issue. I believe he was doing
> something strange in a service/dao class which resulted in inserts new
> objects with the same PK as an existing object.
>
> regards Malcolm Edgar
>
> On 1/23/07, Michael Gentry <bl...@gmail.com> wrote:
> > 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 <dv...@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 <bl...@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 <dv...@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
> > > > >
> > > > >
> > > >
> > >
> > >
> >
>
Re: help on relationship
Posted by Malcolm Edgar <ma...@gmail.com>.
Hi All,
I think Jun has sorted out this issue. I believe he was doing
something strange in a service/dao class which resulted in inserts new
objects with the same PK as an existing object.
regards Malcolm Edgar
On 1/23/07, Michael Gentry <bl...@gmail.com> wrote:
> 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 <dv...@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 <bl...@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 <dv...@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
> > > >
> > > >
> > >
> >
> >
>
Re: help on relationship
Posted by Michael Gentry <bl...@gmail.com>.
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 <dv...@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 <bl...@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 <dv...@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
> > >
> > >
> >
>
>
Re: help on relationship
Posted by Jun Bondoy <dv...@gmail.com>.
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 <bl...@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 <dv...@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
> >
> >
>
Re: help on relationship
Posted by Michael Gentry <bl...@gmail.com>.
I meant to add that the set* methods are for to-one relationships and
the addTo* methods are for to-many relationships.
/dev/mrg
On 1/20/07, Michael Gentry <bl...@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 <dv...@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
> >
> >
>
Re: help on relationship
Posted by Michael Gentry <bl...@gmail.com>.
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 <dv...@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
>
>