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