On Mon, Oct 26, 2009 at 12:05 PM, Naftoli Gugenheim <naftoli...@gmail.com>wrote:

>
> It would be feasible to refactor ManyToMany to remove this restriction.
> OneToMany does not require either side to be saved first.
> Can you describe a use case where it would be desirable?
>

I don't think there is.
OneToMany it makes sense that there is no requirement for either side to be
saved first.  However, the pivot table involved in a ManyToMany always needs
both PK's to be unique.


> -------------------------------------
> Jim Barrows<jim.barr...@gmail.com> wrote:
>
> On Mon, Oct 26, 2009 at 11:43 AM, GA <my_li...@me.com> wrote:
>
> > I have made a test that worked. I have modified my code like this:
> >
> >                                     newUser.save
> >                                     newUser.devices += newDevice
> >                                     newUser.save
> >
> > The newDevice was already saved. It looks like both parents must be saved
> > before I save the relationship. Am I right? or I am doing something
> wrong?
> >
>
> No, you always have to save the parents before the relationship.  Well.. as
> long as the relationship table has the parents PK as it's PK's anyway.
> If you remove that restriction, then nah.. it doesn't matter.  Of course
> that way lies madness....
>
>
> > Thanks,
> >
> > GA
> >
> >
> >
> >
> > On Oct 26, 2009, at 6:55 PM, GA wrote:
> >
> > Hello guys,
> >
> > I have a many-to-many relationship between two mappers called, Users and
> > Devices.
> >
> > There is also an API that receives and XML message that contains one user
> > and one device.
> >
> > The API could create the Device and User with the relationship or it
> could
> > create only the relationship in case the users and/or device already
> exists.
> >
> > The problem I have is that the API creates the User and the Device, but
> the
> > not the relationship. This is the code that saves the records (just a
> test
> > for a now):
> >
> > def addUser(req: Req): LiftResponse = {
> >
> >         var tempUserName = ""
> >         var tempDeviceName = ""
> >         var deviceAlreadyExists = false
> >
> >         val newUser = new User
> >         val newDevice = new Device
> >         req.xml match {
> >             case Full(<person>{parameters @_*}</person>) => {
> >                     for(parameter <- parameters){ parameter match {
> >                             case <userName>{userName}</userName> =>
> > tempUserName = userName.text
> >                             case <firstName>{firstName}</firstName> =>
> > newUser.firstName(firstName.text)
> >                             case <lastName>{lastName}</lastName> =>
> > newUser.lastName(lastName.text)
> >                             case <password>{password}</password> =>
> > newUser.password(password.text)
> >                             case <email>{email}</email> =>
> > newUser.email(email.text)
> >                             case <createdon>{createdOn}</createdon> =>
> > newUser.createdOn(new java.util.Date(createdOn.text))
> >                             case <updatedon>{updatedOn}</updatedon> =>
> > newUser.updatedOn(new java.util.Date(updatedOn.text))
> >                             case <device>{deviceName}</device> =>
> > tempDeviceName = deviceName.text
> >                             case _ =>
> >                         }
> >                     }
> >                     try {
> >                         Device.find(By(Device.deviceName,tempDeviceName))
> > match {
> >                             case Full(deviceRequested) =>
> >                                 deviceAlreadyExists = true
> >                             case _ => {
> >                                     newDevice.deviceName(tempDeviceName)
> >                                     newDevice.createdBy(tempUserName)
> >
> newDevice.createdOn(newUser.createdOn)
> >                                     newDevice.updatedBy(tempUserName)
> >
> newDevice.updatedOn(newUser.updatedOn)
> >                                     newDevice.save
> >                                 }
> >                         }
> >                         User.find(By(User.userName, tempUserName)) match
> {
> >                             case Full(userRequested) =>
> >                                 CreatedResponse(wrapXmlBody(<operation
> > id="addPerson" success="1"></operation>), "text/xml")
> >                             case _ => {
> >                                     newUser.userName(tempUserName)
> >                                     newUser.createdBy(tempUserName)
> >                                     newUser.updatedBy(tempUserName)
> >                                     newUser.devices.clear
> >                                     newUser.validated(true)
> >                                     *newUser.devices += newDevice*
> >                                     newUser.save
> >
> CreatedResponse(wrapXmlBody(<operation
> > id="addPerson" success="0"></operation>), "text/xml")
> >                                 }
> >                         }
> >                     }
> >                     catch {
> >                         case e => Log.error("Could not add
> person/device",
> > e); BadResponse()
> >                     }
> >                 }
> >             case _ => Log.error("Request was malformed "+req.view);
> > BadResponse()
> >         }
> >     }
> >
> > The field "devices" is the MappedManyToMany field within the User mapper.
> >
> > What am I doing wrong?
> >
> > Thanks in advance,
> >
> > GA
> >
> >
> >
> >
> >
> > >
> >
>
>
> --
> James A Barrows
>
>
>
> >
>


-- 
James A Barrows

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to