2017-02-27 84 views
0

在jpa我有一些實體(ContentProduct現在但更多可以來)應加入到Comment實體。JPA加入繼承類

問題是我不希望在每個連接實體(Products,Contents ..)的Comment實體中有額外的字段(和表中的列),因爲這些實體將來會增加。

我發現一個半解決方案是使用單表繼承和創造具體的評論類像​​,CommentProduct,並使用鑑別列,但加盟的實體(內容和產品)仍然​​存在。

你有什麼建議?

編輯:

例如註釋和內容之間將@MayToOne許多評論屬於一個內容並因此對於產品樣品關係..

編輯2

在純表關係模式(沒有ORM,如休眠/ jpa)我可以和我做這種解決方案: 添加到評論表中的列1 ITEM_TYPE2 ITEM_ID女巫ITEM_TYPE指定的其他方表名稱(產品,在我的問題的內容)和ITEM_ID指定外鍵的表,它的名字是在ITEM_TYPE列

我怎麼能對此建模在Jpa /休眠ORM?

+0

你能澄清,如果產品的實體有任何與內容實體的關係與否?這將有助於我們如此幫助你:) –

+0

另外你應該知道有多種繼承策略,請查看https://dzone.com/articles/jpa-implementation-patterns-mapping和http://www.datanucleus .org/products/datanucleus/jpa/orm/inheritance.html –

+0

@ mibrahim.iti產品和內容之間沒有任何關係,但它們都與評論有關係,問題是我不想在評論中使用單獨的列表格將評論與實體相關聯 – mohsenJsh

回答

1

您還可以模擬你使用Hibernate描述什麼樣的

class Content { 
    @OneToMany 
    @JoinColum(name = "item_id") 
    @Where("item_type = 'CONTENT'") 
    Set<Comment> comments; 
} 

class Product { 
    @OneToMany 
    @JoinColum(name = "item_id") 
    @Where("item_type = 'PRODUCT'") 
    Set<Comment> comments; 
} 

class Comment { 
    @Id 
    @GeneratedValue 
    Long id; 
    @Enumerated(STRING) 
    ItemType itemType; 
    Lont itemId; 
} 

enum ItemType { 
    CONTENT, 
    PRODUCT 
} 
0

這是什麼類型或關係?

如果@OneToOne你可以把有關使用在產品和內容的評論的關係,並在評論使用的選項的mappedBy映射他們,你會跳過註釋的額外列。

如果是@OneToMany您不會在Comment中做任何列,而是再次將信息放在Product和Content中,並且只在Comment網站上使用mappedBy來收集這些對象。

CheckForMoreInfo

+0

我看到了編輯。 – mohsenJsh