2014-05-17 4 views
0

Désolé pour cette question simple. Cependant, je suis confus.Lire des chaînes à partir d'un objet

Je souhaite lire toutes les chaînes de la base de données.

Fondamentalement, j'ai un objet EmailSettings emailAddresses = new EmailSettings() dans mon contrôleur et je veux lire tous les emails enregistrés dans le emailSettings Domain object. La classe ressemble à ça:

class EmailSettings { 

    String emailAddress 

    static constraints = { 

     emailAddress(blank: false, nullable: false, email: true) 

    } 
} 

Mon problème est que je ne reçois pas les adresses e-mail enregistrées sur le emailAddresses objet. Je l'ai essayé avec list(), getEmailAddress (comme emailAddresses.getEmailAddress().toString(), qui est null, même si dans les adresses électroniques db ARE enregistrées sous cet objet de domaine), mais cela ne fonctionne pas ou je reçois une exception.

Une suggestion comment obtenir les adresses e-mail, qui sont enregistrées dans la base de données sous forme de tableau?

J'apprécie votre réponse!

+1

S'il vous plaît voir le commentaire de Graeme et ma mise à jour. – dmahapatro

Répondre

1

Vous créez une nouvelle instance de domaine en la complétant, ce qui ne vous donnera jamais les résultats persistants dans db. Pour obtenir emailAddress de tous emailsettings dans db, vous pouvez utiliser comme:

EmailSetting.all*.emailAdress 

ou

EmailSetting.withCriteria { 
    projections { 
     property 'emailAddress' 
    } 
} 

ou peut également utiliser DetachedCriteria avec projection ci-dessus.

MISE À JOUR
Première approche sera coûteuse, car toutes les lignes seront rapatriées puis emailAddress de chaque ligne sera dérivée. J'ai complètement manqué de mentionner pourquoi j'ai eu la deuxième approche avec l'utilisation des critères. En utilisant Projections, vous obtiendrez seulement les propriétés dont vous auriez besoin au lieu de récupérer la ligne elle-même. Merci à Graeme.

+1

Vos 2 exemples sont très différents. Le premier interrogera tous les objets de la base de données en chargeant chaque ligne de la table en mémoire, puis extraira la valeur de la propriété de chaque objet. En d'autres termes, c'est une opération très coûteuse. Vous êtes mieux avec le deuxième exemple, ou en utilisant DetachedCriteria comme mentionné –

+1

@GraemeRocher Exactement. C'est pourquoi j'ai eu le deuxième exemple. J'ai manqué de mentionner le raisonnement derrière l'utilisation d'un critère sur un week-end, mais je voudrais certainement ajouter cela comme une mise à jour, merci. – dmahapatro

Questions connexes