2016-01-25 62 views
0

我使用mongodb來存儲json文檔,並且因爲我使用Hibernate ORM來處理關係模型,所以我決定使用OGM作爲mongo的OGM。表具有Hibernate OGM和mongodb的具體類

目前我所有的OGM實體共享同一個父類,它看起來是這樣的:

@Entity 
public abstract class Document { 
    private static final Gson GSON = new Gson(); 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Type(type = "objectid") 
    protected String id; 

    public String id() { 
     return this.id; 
    } 

    @Override 
    public String toString() { 
     return Document.GSON.toJson(this); 
    } 
} 

@Entity 
public class Address extends Document { 
    private String city; 
    private String street; 
    private int house; 
} 

@Entity 
public class Person extends Document { 
    private String name; 

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
    private Set<Address> addresses; 
} 

(簡化當然)

我所期待的,當我堅持一個Person實例是會發生這兩個集合將在數據庫中創建,一個用於Person,另一個用於Address,我推斷:

弗吉尼亞州rious繼承策略不會由Hibernate OGM支持, 只有每個具體類策略表用於

Supported entity mapping - Hibernate OGM documentation

但是發生在現實情況是,只有一個集合名稱爲Document與創建其中兩個文件:

{ 
    _id : id1, 
    DTYPE : Person, 
    name : name of person 
} 

{ 
    _id : id2, 
    DTYPE : Address, 
    city : City of address, 
    street : Street of address 
    house : 3 
} 

我錯過了什麼?
感謝

回答

1

我想,應該是:

@Entity 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public abstract class Document { 
... 
} 
+0

呀,想它會一直這麼簡單,但它不是..接着我在我的問題所引用的部分(從文檔)它規定「只是不要使用@Inheritance和@ DiscriminatorColumn' –

+1

我的初步答覆是基於文檔而沒有實際測試它,但是我已經決定嘗試一下並不會傷害,並猜測是什麼,它確實有效,即使文檔說不要。謝謝 –

+1

很酷,我會打開一個JIRa來更新文檔 – Davide