| 

.NET C# Java Javascript Exception

n:m Relation properties finden für Template Generierung

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


n:m Relation properties finden für Template Generierung

milkyman - 31.07.2009 11:39
Hallo.

Ich möchte für die Grails Templates die n:m Zuordnung hinzufügen/anpassen. Dazu muss der Code per Generator erzeugt werden.
Derzeit stehe ich vor dem Problem...ähm...der Herausforderung, dass ich nicht erkennen kann, wie die Property der n-Seite auf der m-Seite heißt. Lässt sich so schlecht erklären, hier erstmal die Domains.

class Author implements Comparable {
	String name
	static hasMany = [myBooks:Book, myPublishers:Publisher]
	def belongsTo = Publisher
...
}

class Publisher  {
	String name
	static hasMany = [pubAuthors:Author]
...
}

Es gibt also ein n:m zwischen Autor und Verleger. (Es ist nur ein Beispiel, ob es in der Realität so ist und ob der belongs Sinn macht sei mal dahingestellt.)

Um ein n:m zu erzeugen ist aus Sicht des Publishers Code in dieser Art notwendig:
    def associateToPubAuthors = {
    	def publisherInstance = Publisher.getComposite(params.source_id)
    	def pubAuthors = Author.getComposite(params.id)
    	publisherInstance.addToPubAuthors(pubAuthors)
    	pubAuthors.addToMyPublishers(publisherInstance)
    }

Das funktioniert und ist soweit ok.
Nun will ich diesen Code im Generator erzeugen.
Problematisch ist dabei genau eine Zeile:
    	pubAuthors.addToMyPublishers(publisherInstance)

Die Generierung läuft für die Domain Publisher. Ich habe Zugriff auf alle ihre Properties und kann auch erkennen, dass pubAuthors vom Typ Author ist usw.

Nur: Für diese eine Zeile muss ich wissen, wie die Publisher-Property in der Author Domain heißt. Und genau da klemmt es derzeit. Ich kann über alle Properties der Author Domain iterieren. Aber wie soll ich diejenige erkennen, die die richtige ist. Da es ein n:m ist, ist der Typ der Property ein Set, d.h.
ich finde zwei Sets für myPublishers und für myBooks.

Hat jemand eine Idee, wie ich an diese Information dran komme? Ich meine in der Author-Domain steht ja "myPublishers:Publisher" drin, also Property Name und Typ direkt zusammen. Aber wie komme ich da ran?

Bye,
Horst


Re: n:m Relation properties finden für Template Generierung

vawalda - 31.07.2009 12:22
Hallo Horst,
also in der Groovy-Konsole läuft sowas:
class Author {
    String name
    static hasMany = [myBooks:Book, myPublishers:Publisher]
}
class Publisher  {
    String name
    static hasMany = [pubAuthors:Author]
}
class Book  {
    String titel
}

def auth = new Author()
auth.hasMany.each {k,v ->println "$k ${v == Publisher}"}

Vielleicht hilft dir das weiter.

Gruß Michl


Re: n:m Relation properties finden für Template Generierung

milkyman - 31.07.2009 13:17
Danke dir.

Ganz so einfach war es nicht, weil ich keine Author-Klasse habe, sondern nur sowas wie Meta-Klassen, die für die Generierung erzeugt werden.

Aber am Ende sieht die Lösung ähnlich aus, hier noch zur Vollständigkeit:
		p.referencedDomainClass.getAssociationMap().each { k, v -> 
				if (className == v.name) {
					foreignPropertyName = org.codehaus.groovy.grails.commons.GrailsClassUtils.getNaturalName(k).replaceAll(" ", "")
				}
		}

Bye,
Horst


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "n:m Relation properties finden für Template Generierung" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.