| 

.NET C# Java Javascript Exception

Problem Kreuz-Referenzen zwischen Domänenklassen

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.


Problem Kreuz-Referenzen zwischen Domänenklassen

chrisHHde - 10.04.2008 18:11
Moin moin,

mit Grails scheint es ein Problem zu geben, wenn zwei Entitäten sich gegenseitig referenzieren. Hat irgendjemand von euch damit evtl. schon die gleiche Erfahrung gemacht?

Möglicherweise hängt das Problem auch "nur" damit zusammen, dass ich Hibernate-Mappings benutze, um Grails und der Datenbank zu sagen, wie mein Model aussehen soll....

Also, Szenario:

- Eine Entität "Buch" habe das Feld "author" (not null), das eine Referenz auf einen Author darstellt (den Author des Buches)
- Eine Entität "Author" habe das Feld "lieblingsBuch" (darf null sein), das eine Referenz auf ein Buch darstellt - ein bestimmtes Buch, nämlich das Lieblingsbuch des Authors (oder irgendeins mit einer speziellen Eigenschaft)

Nun lege ich erstmal Authoren an, und dann ein paar Bücher. Den Büchern verpasse ich jeweils den Author.

Dann stelle ich in meiner Datenvorlage fest, dass ein bestimmtes Buch das Lieblingsbuch ist, und speichere es in Author.lieblingsBuch.

Danach speichere ich ein weiteres Buch für den Author und erwarte, dass in Buch.author der gewünschte Author drinsteht. Ich erwarte jedoch nicht, dass dieses zuletzt angelegte Buch plötzlich in Author.lieblingsBuch drinsteht - jedoch genau das passiert bei mir.......

Hat jemand eine Ahnung woran das liegen könnte? Oder wie ich das vermeiden kann? Mache ich irgendwelche grundlegenden Fehler??

Grails: Version 1.0.2

Die beiden Hibernate-Mappings würden ca. so aussehen (ich führe nur die entscheidenen Stellen auf):

Für Author:

<hibernate-mapping>
	<class name="Author" table="authors" lazy="false">
		<many-to-one name="lieblingsBuch" cascade="lock" column="lieblingsBuchId" class="Buch" not-null="false" lazy="no-proxy" access="field">
		</many-to-one>
                ....
	</class>
</hibernate-mapping>


Für Buch:

<hibernate-mapping>
	<class name="Buch" table="books" lazy="false">
		<many-to-one name="author" cascade="lock" column="authorId" class="Author" not-null="true" lazy="no-proxy" access="field">
		</many-to-one>
                ....
	</class>
</hibernate-mapping>

Die Domänenklassen:

class Author {

  .....

  Buch lieblingsBuch

  static constraints = {
    lieblingsBuch(nullable: true)
  }
}

class Buch {

  .....

  Author author

  static constraints = {
    author(nullable: false)
  }
}

Kann es sein, dass Grails mit Hibernate-Mappings nicht so richtig zuverlässig umgeht, und ich sämtliche Beziehungen, constraints usw. aus den Hibernate-Mappings in die Domänenklassen übernehmen muss?? Ich habe bisher gedacht, dass Grails die Mappings für die Beziehungen zwischen den Domänenklassen heranzieht.... immerhin werden alle Objekte ansonsten korrekt abgespeichert, und die Datenbank wird zuverlässig aus den Mappings aufgebaut - allerdings tut das Hibernate, nicht Grails...... hm.

???

EDIT: Hab's jetzt auch nochmal mit einer one-to-one-Beziehung versucht, ist aber dasselbe....

möp


Re: Problem Kreuz-Referenzen zwischen Domänenklassen

chrisHHde - 14.04.2008 10:12
a) Danke für den Tipp, werde ich ausprobieren!
b) Danke! Das könnte genau meinem Problem entsprechen... ich denke auch, dass ich auf jeden Fall explizit die Beziehungen in den Domänenklassen noch einmal setzen muss. Und dort kann ich auf jeden Fall einen constraint setzen, dass (gemäß deinem Fall) z.B.
intPerson(nullable: true)
sein darf. (oder geht das nicht??)

Dass man keine expliziten Member mehr braucht wenn man die Beziehungen setzt (belongsTo / hasMany) kenne ich übrigens auch nur so.

möp


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Problem Kreuz-Referenzen zwischen Domänenklassen" 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.