On Mon, Oct 26, 2009 at 2:36 PM, Naftoli Gugenheim <naftoli...@gmail.com>wrote:
> > What do you mean by that? Every primary key is unique. > The pivot table is typically only 2 columns, which are the PK's for each side of the MTM. ----------- --------- ----------- |Table1|--------->|Pivot|<--------|Table2| ----------- -------- ----------- PK1 PK1 PK2 PK2 Sorry, should have drawn that out earlier :) > ------------------------------------- > Jim Barrows<jim.barr...@gmail.com> wrote: > > 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 > > > > > > -- 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 -~----------~----~----~----~------~----~------~--~---