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

From: Laszlo Spoor (lspoor_cayenn..otmail.com)
Date: Thu Feb 27 2003 - 15:35:12 EST


Hi Craig,

Well, maybe a good example will clarify the flattened relationships better.
I accidently stumbled on this feature by browsing the mailing archives.

I could write the example, based on the case I sent you earlier if you like.
It is simple, but illustrative.

Laszlo

>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 09:09:09 +1300
>
>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
> >
>
>

_________________________________________________________________
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:37:56 EST