Frage

Ich frage mich, ob möglich ist folgendes Domänenmodell zu implementieren.

Lassen Sie sich eine Domain-Klasse, die von Intervallen (joda Zeit) eingestellt enthält. Ich kann org.joda.time.contrib.hibernate.PersistentInterval Hibernate Benutzertyp für die Zuordnung von Intervall zu Datenbanktabelle (durch ähnliche Art und Weise wie in http://www.grails.org/JodaTime+Plugin ). Allerdings kann ich nicht herausfinden, wie Zuordnung zu implementieren, wenn ich von Intervallen festgelegt habe, nicht nur ein Intervall.

Beispiel:

class Activity {  
   ...    
   Set intervals = []  
   ...  
   static hasMany = [    
       intervals: org.joda.time.Interval  
   ]  

   // This is incorrect implementation, I have set of intervals  
   // and this would be correct if I had only one interval  
   // How to implement mapping in this case?  
   static mapping = {  
       intervals type: PersistentInterval, {  
           column name: "start"  
           column name: "end"  
       }  
   }  
     

}

Implementierung oben nicht mit folgenden Fehlern:

  

2010-10-23 18: 30: 25.483 [main] ERROR   context.GrailsContextLoader - Fehler   Ausführen Schopf: Fehler beim Erstellen   Bean mit dem Namen ‚Message‘:   Initialisierung der Bohne fehlgeschlagen; verschachtelte   Ausnahme ist   org.springframework.beans.factory.BeanCreationException:   Fehler beim Erstellen der Bohne mit dem Namen   ‚Transaction‘: kann nicht aufgelöst werden   Bezugnahme auf bean ‚session‘   während Einstellung Bean-Eigenschaft   ‚Session‘; verschachtelte Ausnahme ist   org.springframework.beans.factory.BeanCreationException:   Fehler beim Erstellen der Bohne mit dem Namen   'Session': Invocation von init   Verfahren versagt; verschachtelte Ausnahme ist   org.hibernate.MappingException:   Unbekannter Schlüssel   (FK4FDC5B1E5107CA0: activity_intervals   [Start, Ende])) müssen gleiche Anzahl haben,   Spalten wie die referenzierten Primärschlüssel   (Aktivität [id])   org.springframework.beans.factory.BeanCreationException:   Fehler beim Erstellen der Bohne mit dem Namen   ‚Message‘: Initialisierung   bean fehlgeschlagen; verschachtelte Ausnahme ist   org.springframework.beans.factory.BeanCreationException:   Fehler beim Erstellen der Bohne mit dem Namen   ‚Transaction‘: kann nicht aufgelöst werden   Bezugnahme auf bean ‚session‘   während Einstellung Bean-Eigenschaft   ‚Session‘; verschachtelte Ausnahme ist   org.springframework.beans.factory.BeanCreationException:   Fehler beim Erstellen der Bohne mit dem Namen   'Session': Invocation von init   Verfahren versagt; verschachtelte Ausnahme ist   org.hibernate.MappingException:   Unbekannter Schlüssel   (FK4FDC5B1E5107CA0: activity_intervals   [Start, Ende])) müssen gleiche Anzahl haben,   Spalten wie die referenzierten Primärschlüssel   (Aktivität [id])           bei org.grails.tomcat.TomcatServer.start (TomcatServer.groovy: 212)

dachte ich, dass Work-around für dieses Problem ist Intervall auf separate Domäne-Klasse erweitert Intervall zu extrahieren und geben Mapping innerhalb dieser Gruppe. Allerdings Intervall ist letzte Klasse so erweitert nicht möglich.

Vielen Dank für Ihre Ratschläge.

War es hilfreich?

Lösung

Ich bin meine eigene Frage beantworten, vielleicht diese Antwort für jemanden nützlich sein.

Bis jetzt habe ich nur einen Weg gefunden, wie bestimmtes Modell zu implementieren - von Hibernate XML-Mapping-Dateien :

<hibernate-mapping package="mappingtest">  
    <class name="Activity">  
        <id name="id">  
            <generator class="native"/>  
        </id>  
        <set name="intervals">  
            <key column="activity_id" not-null="true"/>  
            <element type="org.joda.time.contrib.hibernate.PersistentInterval">  
                <column name="startDate"/>  
                <column name="endDate"/>  
            </element>  
        </set>  
    </class>  
</hibernate-mapping>  

und Domain-Klasse Implementierung:

class Activity {    
    Long id    
    Set intervals = []

    static constraints = {
    }
}

Ich habe auch zu bewegen Domain-Klasse von Grails-app / Domain src / groovy Verzeichnis, sonst läuft Anwendung kann nicht mit (Grails-1.3.5):

  

...
  org.hibernate.DuplicateMappingException:   Doppelte Klasse / Entitätszuordnung   mappingtest.Activity
  ...

Zweites Problem mit obiger Implementierung ich entdeckt habe, ist, dass, wenn ich auf Gerüste eingeschaltet (zu Testzwecken) von:

class ActivityController {
    static scaffold = true
    ...
}

zeigt von erstellten Aktivität fehlgeschlagen mit Fehlern:

  

Ausnahmemeldung: Keine solche Eigenschaft:   id für die Klasse: org.joda.time.Interval   Mögliche Lösungen: Ende Verursacht durch:   Fehler bei der Auswertung Ausdruck [i.id] auf   line [38]: Eine solche Eigenschaft: id für   Klasse: org.joda.time.Interval Mögliche   Lösungen: Ende

aber manuelle Durchführung der Aktivitäten von DB und seiner Vorführung immer gearbeitet.

Edit: zusätzlich fand ich Lösung von Gerüsten und DuplicateMappingException Fragen. Sie wurden durch ungültige Stelle von Activity.hbm.xml verursacht - Paket Verzeichnisstruktur fehlte. Die korrekte Lage ist Grails-app / conf / Hibernate / mappingtest / Activity.hbm.xml.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top