2010-11-12 8 views
14

J'essaie de définir le tri par défaut de mon attribut hasMany en utilisant l'instruction de mappage. Je suis le doc de grails mais cela ne fonctionne pas pour moi (Grails 1.3.5). Mon code ressemble:Grails type par défaut des attributs de domaine "hasMany"

class Note { 
    Calendar sendDate 
    static belongsTo = Message 
} 

class Message { 
    static hasMany = [notes: Note] 
    static mapping = { 
     notes sort:'sendDate desc' 
    } 
} 

Le message d'erreur ressemble:

... 
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'notes0_.sendDate' in 'order clause' 
     at com.mysql.jdbc.Util.handleNewInstance(Util.java:409) 
     at com.mysql.jdbc.Util.getInstance(Util.java:384) 
... 

Voyez-vous des erreurs dans mon code?

+0

exporter votre schéma et voir du tableau et des colonnes existent http://www.grails.org/doc/1.1/ref/Command%20Line/schema-export.html –

+0

@Aaron - Quand j'ai essayé ceci avec la valeur par défaut base de données en mémoire hsqldb, il a seulement créé une colonne pour le champ 'Calendar', et tout avait l'air normal (je pensais peut-être qu'il créait deux colonnes à stocker, par exemple, le fuseau horaire ou quelque chose, mais il ne semblait pas c'était). –

Répondre

20

Un couple de choses qui peuvent aider à résoudre le problème:

  • Avez-vous vraiment besoin d'utiliser un Calendar pour la propriété sendDate? La plupart du temps, on utilisait un java.util.Date. Est-ce que le changement du type de champ à Date résout le problème?
  • J'ai exécuté un exemple avec vos mappings et j'ai eu une erreur. Essayez de changer la fermeture Messagemapping statique à ceci:

    static mapping = { 
        notes sort: 'sendDate', order: 'desc' 
    } 
    
+1

Malheureusement, les deux n'ont pas fonctionné pour moi. Mais j'ai résolu le problème que j'ai défini la relation des deux côtés. Je viens d'ajouter "Message Message" à la classe Note et cela fonctionne. :-) Mais de toute façon merci pour votre intérêt! :-) – Mateo

+2

@Mateo - Bon à savoir. Je vous recommande de poster tout ce que vous avez trouvé pour une solution en guise de réponse, puis de l'accepter (dans quelques jours) afin que les autres sachent comment résoudre le problème s'ils le rencontrent. –

9

This page dit tout sur Object Relational Mapping, j'ai eu un problème similaire avec mon application. Je l'ai résolu comme ceci:

class Note implements Comparable { 
    Calendar sendDate 
    static belongsTo = Message 

    int compareTo(obj) { 
    sendDate.compareTo(obj.sendDate) 
    } 
} 

et

class Message { 
    SortedSet notes 
    static hasMany = [notes: Note] 
} 

espère que cette helpes!

Questions connexes