2016-01-25 3 views
0

J'utilise mongodb pour stocker des documents json, et comme j'utilise Hibernate ORM pour mes modèles relationnels, j'ai décidé d'utiliser le OGM pour les documents mongo.Table par classe concrète avec Hibernate OGM et mongodb

Actuellement toutes mes entités OGM partagent la même classe parente, il ressemble à quelque chose comme:

@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; 
} 

(simplifié bien sûr)

Ce que je pensais que se passerait-il quand je persiste une instance Person est que deux collections seront créées dans le db, un pour Person et l'autre pour Address, que je jugeai:

le va stratégies d'héritage Rious ne sont pas pris en charge par Hibernate ogm, seule la table par stratégie de classe concrète est utilisée

(Supported entity mapping - Hibernate OGM documentation)

Mais ce qui se passe en réalité est que seule collection est créée avec le nom Document avec deux documents:

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

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

Que manque-t-il?
Merci

Répondre

1

Je pense, il devrait être:

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

Oui, souhaite, il aurait été facile, mais il ne .. Après la partie que je citais dans ma question (de la documentation), il déclare que: 'N'utilisez simplement pas @Inheritance ni @ DiscriminatorColumn' –

+1

Ma réponse initiale était basée uniquement sur la documentation sans réellement la tester, mais j'ai alors décidé que ça ne ferait pas de mal de faire un essai, et devinez quoi, ça marche, même si la documentation dit de ne pas le faire. Merci –

+1

Cool, je vais ouvrir un JIRa pour mettre à jour la documentation – Davide