Стол для конкретного класса с Hibernate OGM и mongodb
Я использую mongodb для хранения документов json, и, поскольку я использую Hibernate ORM для своих реляционных моделей, я решил использовать OGM для монго.
В настоящее время все мои объекты 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
}
Что мне не хватает?
Спасибо
1 ответ
Я думаю, это должно быть:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Document {
...
}