具有Hibernate OGM和mongodb的每个具体类的表

时间:2016-01-25 20:54:55

标签: mongodb hibernate hibernate-ogm

我正在使用mongodb来存储json文档,因为我在我的关系模型中使用Hibernate ORM,所以我决定将OGM用于mongo文件。

目前我的所有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,我推断:

  

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 个答案:

答案 0 :(得分:1)

我认为应该是:

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