2011-07-10 33 views
3

可能是一個非常小的問題。如何自動獲取JDO嵌套實體集合?

我有一個對象,看起來像這樣:

@PersistenceCapable 
public class Parent { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private String _id; 

    @Persistent 
    private List<Child> _children; 

    //... 
} 

...嵌套實體看起來像這樣(我被迫宣佈主鍵鍵否則將無法持續):

@PersistenceCapable 
public class Child { 

    @PrimaryKey 
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) 
    private Key _id; 

    @Persistent 
    private String _whatever; 

    //... 
} 

當我堅持一切都持續確定(包括子實體),但我想通過獲取父對象(例如getObjectById)取回所有內容,但該集合返回爲空。

Owned One-to-Many Relationships似乎是我正在尋找 - 但我有麻煩,看看它如何可以幫助我找回父對象與填充的子實體集合。

任何幫助表示讚賞!

+0

也許狀態什麼是您的JDO代碼和任何事務邊界,pm.close等 – DataNucleus

+0

@DataNucleus看到我的答案 - 這就是我正在尋找的 – JohnIdol

回答

4

@Persistent(defaultFetchGroup = 「真」) 的伎倆,你說得對。

您的_children屬性的內容僅在第一次訪問它時(pm.close!之前)加載。它被稱爲延遲加載。如果您希望默認直接加載子實體或子實體集合,請應用上述「技巧」。

在我的應用程序中,如果是子實體集合,它會在開發服務器上生成錯誤消息(數據存儲不支持連接..),但是您可以忽略這個錯誤錯誤,它在Dev中工作正常和產品環境。

請注意,通過其父實體獲取集合需要爲每個子實體獲取1個數據存儲區。

+0

感謝您的解釋:) – JohnIdol

1

這似乎這樣的伎倆:

@Persistent(defaultFetchGroup = "true")