2012-12-19 43 views
1

在JPA中,是否可以創建一個@OnToOne關係,只是一個想法而不嵌入類?例如:我可以使用ID創建OneToOne關係嗎?

@Entity public class Relationship { 
    @Id 
    @OneToOne 
    private Long parentId; // instead of "private User parent;" 

    @Id 
    @OneToOne 
    private Long childId; // instead of "private User child;" 

    int type; 

    ... 

我不介意有一個懶惰的getter方法獲取,但我並不需要一個,我不希望有完整的父對象拉與子對象的工作。此外,我想反序列化到JSON只使用id而不是嵌入對象。我可以通過添加一個getter來代替#getParent()。getId()並在#getParent()方法上放置一個JsonIgnore(對於child來說也是如此),但我寧願讓實體看起來像這樣我希望它能夠在不添加這些東西的情況下從頭開始。可能,如果是這樣怎麼樣?

謝謝!

回答

0

號碼Object如何與數字相關?畢竟,這是一種O-O語言。

標記爲@OneToOne的內容在語義上等同於數據存儲中的FK。如果您只是省略@OneToOne並使用數字,則您在數據存儲區中有一個數字列,而沒有 FK。所以JPA允許這兩個,但一個給出了FK的好處,而另一個只是傳遞「數字」而沒有與它們相關的內容

+0

JPA無法做到這一點是一個足夠好的答案。您從未聽說過O-O語言中的關鍵/值,屬性等?你可以用數據庫做到這一點,你可以用Java來做到這一點,你可以在JDBC中做到這一點,並且兩者都可以做到,但你不能用JPA做到這一點。你不能因爲它是O-O就是一個弱的答案。 –

+0

你不能在數據庫中做這個確切的事情,因爲當你有一個FK你有你鏈接到的表,並且@OneToOne在一個數字上沒有與它有關的「類型」(即相關類) 。顯然,你可以堅持一個數字,並從你的數據存儲轉儲FKs,但是這會丟掉很多好處... – DataNucleus

+0

我認爲你在分裂頭髮。在數據庫或O-O語言中,您可以與類型化身份關聯。在數據庫中,這可能是FK,而在OO語言中,它可能是由運行時處理的對象引用,或者是某種類型的UID(數字,字符串或其他)被封裝在類型化的身份類。 –

相關問題