Re: help on relationship

From: Jun Bondoy (dvbondo..mail.com)
Date: Thu Jan 25 2007 - 01:05:17 EST

  • Next message: Andrus Adamchik: "Re: deleteObject() and localObject() and object states"

    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 <malcolm.edga..mail.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 <blacknex..mail.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 <dvbondo..mail.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 <blacknex..mail.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 <dvbondo..mail.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
    > > > > >
    > > > > >
    > > > >
    > > >
    > > >
    > >
    >



    This archive was generated by hypermail 2.0.0 : Thu Jan 25 2007 - 01:05:53 EST