Hola, que tal! Estoy tratando de mapear una relacion many to many en Glorp. Tengo la clase usuario y la clase grupo, un usuario es dueño de muchos grupos y un grupo pertenece a un solo usuario; a su vez, tengo otra relacion en la que un grupo contiene muchos usuario y un usuario pertenece a muchos grupos. Cuando intento mapear la relacion one to many, anda todo bien. El problema viene cuando intento mapear la relacion muchos a muchos. En diversos tutoriales de glorp explica como mapear sin especificar la tabla de asociacion, pero buscando encontre que es necesario especificarla debido a que tengo multiples relaciones con las mismas tablas El codigo me genera correctamente la base de datos, y puedo crear grupos y asignarle un dueño, el problema viene cuando quiero agregar un usuario a un grupo determinado, no arroja ningun error, solo un "Se encontro fin de archivo inesperado en la conexion del cliente" en el log de PGAdmin. Como se resolveria esto? Esta bien lo que estoy haciendo? El mapeo que realice es el siguiente: classModelForGroup: aClassModel aClassModel newAttributeNamed: #id. aClassModel newAttributeNamed: #name classModelForUser: aClassModel aClassModel newAttributeNamed: #id. aClassModel newAttributeNamed: #username. aClassModel newAttributeNamed: #password. aClassModel newAttributeNamed: #tweets collectionOf: TwittAR.Tweet. aClassModel newAttributeNamed: #groups collectionOf: TwittAR.Group. aClassModel newAttributeNamed: #groupsIbelong collectionOf: TwittAR.Group descriptorForGroup: aDescriptor | table linkTable | self tableNamed: 'GROUP_HAS_USER'. linkTable := self tableNamed: 'GROUP_HAS_USER'. table := self tableNamed: 'GROUPS'. aDescriptor table: table. (aDescriptor newMapping: Glorp.DirectMapping) from: #id to: (table fieldNamed: 'id'). (aDescriptor newMapping: Glorp.DirectMapping) from: #name to: (table fieldNamed: 'name'). (aDescriptor newMapping: Glorp.ManyToManyMapping) attributeName: #members; referenceClass: TwittAR.User; mappingCriteria: (Glorp.Join from: (table fieldNamed: 'id') to: (linkTable fieldNamed: 'group_id')). (aDescriptor newMapping: Glorp.ManyToManyMapping) attributeName: #tweets; referenceClass: TwittAR.Tweet descriptorForUser: aDescriptor | table linkTable | table := self tableNamed: 'USERS'. linkTable:= self tableNamed: 'GROUP_HAS_USER'. aDescriptor table: table. (aDescriptor newMapping: Glorp.DirectMapping) from: #id to: (table fieldNamed: 'id'). (aDescriptor newMapping: Glorp.DirectMapping) from: #username to: (table fieldNamed: 'username'). (aDescriptor newMapping: Glorp.DirectMapping) from: #password to: (table fieldNamed: 'password'). (aDescriptor newMapping: Glorp.OneToManyMapping) attributeName: #tweets. (aDescriptor newMapping: Glorp.OneToManyMapping) attributeName: #groups. (aDescriptor newMapping: Glorp.ManyToManyMapping) attributeName: #groupsIbelong; referenceClass: TwittAR.Group; mappingCriteria: (Glorp.Join from: (table fieldNamed: 'id') to: (linkTable fieldNamed: 'user_id')). tableForGROUPS: aTable | owner | (aTable createFieldNamed: 'id' type: platform sequence) bePrimaryKey. aTable createFieldNamed: 'name' type: platform text. owner := aTable createFieldNamed: 'user_id' type: platform int4. aTable addForeignKeyFrom: owner to: ((self tableNamed: 'USERS') fieldNamed: 'id'). tableForUSERS: aTable (aTable createFieldNamed: 'id' type: platform sequence) bePrimaryKey. aTable createFieldNamed: 'username' type: platform text. aTable createFieldNamed: 'password' type: platform text tableForGROUP_HAS_USER: aTable | groupKey userKey | "(aTable createFieldNamed: 'id' type: platform sequence) bePrimaryKey." userKey := aTable createFieldNamed: 'user_id' type: platform int4. aTable addForeignKeyFrom: userKey to: ((self tableNamed: 'USERS') fieldNamed: 'id'). groupKey := aTable createFieldNamed: 'group_id' type: platform int4. aTable addForeignKeyFrom: groupKey to: ((self tableNamed: 'GROUPS') fieldNamed: 'id' To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Hola Cache
Te doy una respuesta parcial, y tiene que ver con postgres ya que lo conozco bien, no tengo tanta experiencia con Glorp asi que dejo eso a otra persona de la lista,
Me llama la atención la descripción del error, pienso que por el error podriamos ver que es lo que esta saliendo mal, ese error es cuando se corta la conexion, si en el archivo postgresql.conf pones
log_statement='all' podras ver en el log que intento hacer con mas detalle.
tal vez esto sirva para encontrar la pista, quizas debas reiniciar el postgres a veces con reload alcanza, no se si estas en linux
/etc/init.d/postgresql restart ó (no se si funciona) /etc/init.d/postgresql reload
saludos jmdc
To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
In reply to this post by Chache Schulz
Mira, problema del Posgres no creo que sea, porque he probado otras cosas y funcionaron perfectamente. Estoy seguro que es un problema de mapeo por bastantes cosas que lei. Ahora voy a chusmear el log a ver si es algo de eso, pero no creo que sea!
-- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Cache
Yo tampoco creo que sea problema del postgres, pero una mejor descripcion dara mejores ideas de que pueda ser. 2012/8/13 Chache Schulz <[hidden email]>
To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Hola yo conozco bien glorp pero en pharo.. por los nombre de clases, creo que estas usando VW..
bueno el mapping de la relacion manytomany esta bien, para el usario grupos.. pero no veo que este bien el mapping de twitts.. el error no te esta dando por eso? (aDescriptor newMapping: Glorp.ManyToManyMapping) attributeName: #tweets; referenceClass: TwittAR.Tweet igual en tenes una forma de habilitar el log de los SQL que genera, creo que cuando creas la instancia de DatabaseSystem, pero no puedo asegurarte como es en VW.. Si le escribis a Alan Knigth el chabon se copa y contesta rapido. Saludos http://about.me/diogenes.moreira El 13 de agosto de 2012 14:57, Juan <[hidden email]> escribió: Cache -- To post to this group, send email to [hidden email] To unsubscribe from this group, send email to [hidden email] http://www.clubSmalltalk.org |
Free forum by Nabble | Edit this page |