2017-07-30 6 views
2

Je viens de découvrir que quand je vais stocker dans mon mongodb, avec hibernate ogm, une liste devient un ensemble (donc pas de répétitions). Comment puis-je l'éviter? Voilà comment je déclarais le terrain:Je déclare une instance de List mais hibernate un Set

@ElementCollection private List<Double> doubles; 

Par exemple, J'ai cette liste: [0,1 0,1 0,1 0,3] Quand je vais stocker, il becames [0,1 0,3]

Une escamotage serait de définir une collection comme ceci:

@ElementCollection private Map<Integer,Double> doubles; 

Mais cette structure est inutilement complexe et dans mon cas, que je dois mettre des vecteurs très longs, il pourrait être un problème!

Répondre

0

Vous devriez pouvoir spécifier le type de la collection qu'Hibernate utilisera dans le mappage.

Vérifiez la documentation - il fournit des exemples de mapping XML, je cite:

Outre la balise comme indiqué dans l'exemple 7.4, « Cartographie d'un ensemble à l'aide », il y a aussi la liste, carte, sac, array et éléments de mappage de primitives.

Aussi, consultez Hibernate - Bag Mappings

Par exemple, dans Fluent NHibernate vous pouvez utiliser .AsBag() et .AsSet() méthodes d'extension sur une cartographie pour indiquer si vous voulez une sémantique de sac, à savoir non ordonnée séquence avec des doublons.

Voir this blog post et this blog post pour un exemple d'utilisation ceci dans NHibernate

Essentiellement, votre cartographie couramment pourrait ressembler à ceci

public YourClassMap : ClassMap<YourClass> 
{ 
    public YourClassMap() 
    { 
    HasMany<double>(x => x.doubles) 
     .AsBag() 
     .Access.CamelCaseField(); 
... 

Votre mapping XML ressemblerait à quelque chose comme ça

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="YourNamespace" assembly="YourAssembly"> 
    <class name="YourClass" table="YourTableName"> 
    ... 
    <bag name="doubles" table="Doubles"> 
     <one-to-many class="Double"/> 
    </bag> 

Désolé de fournir des exemples uniquement pour N Hibernate, c'est ce que je fais tous les jours, vous devriez être capable de l'appliquer aussi facilement dans Hibernate

+0

Merci, mais je n'ai jamais mappé une entité avec XML. Bien que j'essaie, je reçois une erreur. C'est un peu déformé. Après tout, je demande un peu. –

+0

@ Daniel-san, pourriez-vous s'il vous plaît fournir l'erreur que vous obtenez? Et peut-être la cartographie des composants que vous essayez de faire fonctionner. – ironstone13

+1

L'erreur est en italien, mais en substance, il est dit que MyClass ne veut pas d'attributs. Nous parlons de dependencies.xml, non? –