2012-10-02 61 views
0

我第一次爲新項目使用JDO(與Datanucleus實現),並且我遇到了使用JDO註釋定義1-N單向所有關係的麻煩。我需要的是要有Subitems集合中的Item,使得Subitem沒有給業主一個參考:使用註釋的JDO - 1-N單向關係 - 列名?

@PersistenceCapable(detachable = "true") 
public class Item { 
    ... 
    @Persistent(defaultFetchGroup = "true") 
    Collection<Subitem> subitems; 
    ... 
} 

這一切都很好,但我怎麼能確定哪些現有的RDBMS列該關係映射到?通過在子表中創建不可爲空的表列,但我沒有(也不想要)父代引用類字段Subitem中的數據庫實現了AFAIK擁有的1-N,其中I然後可以使用@Column(name="...")註釋進行裝飾。

如何在JDO3中正確使用@ForeignKey註釋?該註釋接受FK約束的名稱,但不接受相應的FK表和列規格。根據定義,FK是參考。約束兩個表基於一個公共密鑰,但我似乎無法指定其他表和一個公用密鑰(@ForeginKey at Datanucleus JDO docs)。

編輯: @Element(column="...")註解,而應使用:

@PersistenceCapable(detachable = "true") 
public class Item { 
    ... 
    @Persistent(defaultFetchGroup = "true") 
    @Element(column="itemId") 
    Collection<Subitem> subitems; 
    ... 
} 

,因爲它是在答案的文檔鏈接作了明確規定。

回答

1

JDO(或者JPA也沒有)沒有「擁有」關係,只有關係(這是一個我從未聽說過的有關GAE數據存儲的術語,而且你沒有使用它) 。

DataNucleus將文檔定義了所有這些關係充分恕我直言,所以只是導航從那裏你有菜單,例如 http://www.datanucleus.org/products/accessplatform_3_1/jdo/orm/one_to_many_collection.html#fk_uni

http://www.datanucleus.org/products/accessplatform_3_1/jdo/orm/constraints.html#fk

+0

謝謝您的回答,我已經錯過了莫名其妙的一部分文檔。我被「@ ForeignKey」註釋的實際名稱誤導了,它似乎應該使用@Element(column =「...」)'。我現在所有想知道的是@ @ ForeignKey註解的目的是什麼。 :) –

+0

並且非常感謝您使用優秀的數據工具,無代理且可預測的分離模式是數據對象作爲DTO的雙重職責的天賜之物(並且與GWT很好地匹配)! –

+1

該列不是RDBMS中的「外鍵」;它僅被「外鍵」使用。 @ForeignKey定義了「外鍵」本身(它的名字以及如何/是否級聯等)。 – DataNucleus