2014-05-17 82 views
0

对于这个简单的问题感到抱歉。但是,我很困惑。从对象中读取字符串

我想读取数据库中的所有字符串。

基本上我在我的控制器中有一个EmailSettings emailAddresses = new EmailSettings()对象,并且想要读取保存在emailSettings Domain object中的所有电子邮件。这个类看起来像:

class EmailSettings { 

    String emailAddress 

    static constraints = { 

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

    } 
} 

我的问题是我没有得到保存的电子邮件地址了emailAddresses对象。我试了list(),getEmailAddress(就像emailAddresses.getEmailAddress().toString(),这是null,即使在这个域对象下保存的db ARE电子邮件地址),但它不起作用,或者我得到一个异常。

任何建议如何获得电子邮件地址,这是在数据库中保存为数组?

我很感谢您的回答!

+1

请参阅Graeme的评论和我的更新。 – dmahapatro

回答

1

你正在创建一个新的域实例,它永远不会给你在db中持久化的结果。为了得到所有以dB为EmailSettings emailAddress,你可以使用如:

EmailSetting.all*.emailAdress 

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

,或者也可以使用的DetachedCriteria与上述投影。

UPDATE
第一种方法将是昂贵的,因为所有的行会中取出,然后从每行emailAddress会的。我完全没有提到为什么我使用Criteria的第二种方法。使用Projections,你只会得到你需要的属性,而不是获取行本身。感谢Graeme。

+1

你的两个例子是非常不同的。第一个将查询数据库中的所有对象,将表的每一行加载到内存中,然后从每个对象中检索属性值。换句话说,这是一项非常昂贵的操作。你最好用第二个例子,或者使用DetachedCriteria作为 –

+1

@GraemeRocher准确。这就是为什么我有第二个例子。我错过了提及在周末使用Criteria背后的基本原理,但我肯定会补充说,作为更新,谢谢。 – dmahapatro