Таблица для каждого конкретного класса с Hibernate OGM и mongodb

Я использую 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, используется только таблица для конкретной стратегии класса.

(Поддерживаемое сопоставление сущностей — документация Hibernate OGM< /а>)

Но в реальности получается только одна коллекция с именем Document с двумя документами в ней:

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

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

Что я упускаю?
Спасибо.


person Nitzan Tomer    schedule 25.01.2016    source источник


Ответы (1)


Я думаю, должно быть:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Document {
...
}
person Davide    schedule 26.01.2016
comment
Да, хотелось бы, чтобы это было так просто, но это не так. После части, которую я процитировал в своем вопросе (из документов), говорится, что: Simply do not use @Inheritance nor @DiscriminatorColumn - person Nitzan Tomer; 26.01.2016
comment
Мой первоначальный ответ был основан только на документации без фактического тестирования, но потом я решил, что не помешает попробовать, и угадайте, что это действительно работает, хотя в документации сказано, что это не так. Спасибо - person Nitzan Tomer; 27.01.2016
comment
Круто, я открою JIRa, чтобы обновить документацию - person Davide; 27.01.2016