2014-05-17 125 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