Re: [question]: problems with n:m mappings(flattened-relationships).

From: Craig Miskell (cmiskel..lbatross.co.nz)
Date: Thu Feb 27 2003 - 15:09:09 EST

  • Next message: Laszlo Spoor: "Re: [question]: problems with n:m mappings(flattened-relationships)."

    No problems. I might look at giving a better error message (more
    details when trying to set a value on a readonly flattened relationship,
    suggesting what might be wrong (or performing some diagnostics and being
    *certain* what is wrong).

    Craig

    On Fri, 2003-02-28 at 09:04, Laszlo Spoor wrote:
    >
    > Hi Craig!
    >
    > I got it working! You were right. I forget to set the primary key in the
    > intermediate/intersection table.
    >
    > Thanks for your support :-).
    >
    > Best regards, Laszlo Spoor
    >
    >
    >
    > >From: Craig Miskell <cmiskel..lbatross.co.nz>
    > >To: cayenne-use..bjectstyle.org
    > >Subject: Re: [question]: problems with n:m
    > >mappings(flattened-relationships).
    > >Date: 28 Feb 2003 07:48:58 +1300
    > >
    > >You're certainly close and have all the right ideas, but there's likely
    > >just one small thing tripping you up. Flattened relationships are
    > >determined to be readonly, UNLESS
    > >
    > >1) It has exactly 2 dbrelationships (true in your case, so not the
    > >problem)
    > >2) The first relationship in the path is toMany or the the second is
    > >toOne (in your case, toProjectEmployees is toMany and toEmployess is
    > >toOne, so that's not the problem).
    > >3) Finally, and this is where I suspect something may be going astray in
    > >your model, all of the attributes in the intermediate table must be part
    > >of the primary key of the intermediate table. It's a guess (without
    > >seeing your model), but I reckon that the most likely candidate is that
    > >EMP_PROJ dbEntity doesn't have both it's attributes marked as pk?
    > >
    > >If not, send me your data map and I'll have a look.
    > >
    > >Craig
    > >
    > >On Thu, 2003-02-27 at 21:54, Laszlo Spoor wrote:
    > > > Database: MySQL 3.23
    > > > Cayenne : 1.0a6
    > > >
    > > > Hi Guys,
    > > >
    > > > I have recently started to work with Cayenne. Pretty cool stuff!
    > >However, I
    > > > have some problems with the 'flattened-relationships'. My problem is
    > >that I
    > > > cannot get it to work, but I don't know what I am doing wrong. I
    > >described
    > > > the steps I took below:
    > > >
    > > > I have created 3 tables (this case is based on the mail of one of the
    > > > subscribers of this mailing list) and inserted some data:
    > > >
    > > > EMPLOYEES (id integer, firstname varchar(100));
    > > > PROJECTS (id integer, projectname varchar2(100));
    > > > EMP_PROJ (emp_id integer, prj_id integer);
    > > >
    > > > Since I use MySQL (which has no support for referential constraints), I
    > > > created the relationships between the DataObject myself in the modeler
    > > > (after reverse engineering the schema into cayenne):
    > > >
    > > > EMPLOYEES <-|(1:n)|-> EMP_PROJ
    > > > PROJECTS <-|(1:n)|-> EMP_PROJ
    > > > EMP_PROJ <-|(n:1)|-> EMPLOYEES
    > > > EMP_PROJ <-|(n:1)|-> PROJECTS
    > > >
    > > > The objects that Cayenne generated for me where:
    > > > - Employees
    > > > - Projects
    > > > - EmpProj
    > > >
    > > > I removed the EmpProj Object (not the table), removed the Ids and
    > >renamed
    > > > the classes to:
    > > > - Employee
    > > > - Project
    > > >
    > > > In the ObjectMap I created a pass-through relationship for Employee:
    > > > name : projects
    > > > target : Project
    > > > to-many : yes.
    > > >
    > > > The DBRelationship I selected was: toProjectEmployees.ToProjects. This
    > >maps
    > > > from EMPLOYEE.ID to EMP_PROJ.PRJ_ID. I cannot select anything else. It
    > >will
    > > > just replace it with PRJ_ID, which seems fine.
    > > >
    > > > In the ObjectMap I created a pass-through relationship for Project:
    > > > name : employees
    > > > target : Projects
    > > > to-many : yes.
    > > >
    > > > The DBRelationship I selected here was: toProjectEmployeesToEmployees.
    > >This
    > > > maps from PROJECT.ID to EMP_PROJ.EMP_ID. I cannot select anything else
    > >here
    > > > as well.
    > > >
    > > > The Java Code I use is:
    > > >
    > > > [...]
    > > > DataContext mContext =
    > > > Configuration.getSharedConfig().getDomain().createDataContext();
    > > >
    > > > SelectQuery qry = new SelectQuery (Employee.class);
    > > > List emps = mContext.performQuery(qry);
    > > >
    > > > Employee emp = (Employee) emps.get(0);
    > > > logger.info("The Employee instance found: " + emp.getFirstname());
    > > >
    > > > qry = null;
    > > > qry = new SelectQuery (Project.class);
    > > > List prjs = mContext.performQuery(qry);
    > > >
    > > > Project prj = (Project) prjs.get(0);
    > > > logger.info("The Project Instance found: " + prj.getName());
    > > >
    > > >
    > > > logger.info("Adding employee to project... ");
    > > > emp.addToProjects(prj);
    > > >
    > > > mContext.commitChanges(Level.WARN);
    > > > [...]
    > > >
    > > > ... Which results in:
    > > >
    > > > INFO AddEmpToProject: The Employee instance found: John
    > > > INFO AddEmpToProject: The Project Instance found : yx-05
    > > > INFO AddEmpToProject: Adding employee to project...
    > > >
    > > > org.objectstyle.cayenne.CayenneRuntimeException: Cannot modify (add to)
    > >the
    > > > read-only relationship projects
    > > > at
    > > >
    > >org.objectstyle.cayenne.CayenneDataObject.addToManyTarget(CayenneDataObject.java
    > > > :283)at tst.cayenne._Employee.addToProjects(_Employee.java:22)
    > > > at tst.test.AddEmpToProject.main(AddEmpToProject.java:51)
    > > > Exception in thread main
    > > >
    > > > I tried several variations, but this seems the most probable way to me.
    > >Can
    > > > anyone tell me what I am doing wrong and what I should do to get this
    > > > working?
    > > >
    > > > Thanks in advance, Laszlo
    > > >
    > > > _________________________________________________________________
    > > > Add photos to your e-mail with MSN 8. Get 2 months FREE*.
    > > > http://join.msn.com/?page=features/featuredemail
    > > >
    > >
    > >
    >
    >
    > _________________________________________________________________
    > Protect your PC - get McAfee.com VirusScan Online
    > http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963
    >



    This archive was generated by hypermail 2.0.0 : Thu Feb 27 2003 - 15:09:47 EST