我声明了一个List但是hibernate实例是一个Set

时间:2017-07-30 18:41:31

标签: mongodb collections hibernate-ogm

我刚刚发现,当我要使用hibernate ogm存储在我的mongodb中时,列表会成为一个集合(因此不会重复)。 我怎么能避免呢? 以下是我宣布该领域的方式:

@ElementCollection private List<Double> doubles;

例如, 我有这个清单:[0.1 0.1 0.1 0.3] 当我要去商店时,它会成为[0.1 0.3]

escamotage将定义这样的集合:

@ElementCollection private Map<Integer,Double> doubles;

但是这个结构不必要地复杂,在我的情况下,我必须放很长的向量,这可能是个问题!

1 个答案:

答案 0 :(得分:0)

您应该能够指定Hibernate将在映射中使用的集合的类型

查看documentation - 它提供xml映射样本,引用:

  

除了示例7.4“使用映射映射集合”中所示的标记之外   “,还有列表,地图,包,数组和   原始数组映射元素。

另外,请查看Hibernate - Bag Mappings

例如在 Fluent NHibernate 中,您可以在映射上使用.AsBag().AsSet()扩展方法来指示您是否需要包语义,即无序  序列与重复。

有关在 NHibernate

中使用此功能的示例,请参阅this blog postthis blog post

从本质上讲,您的流畅映射可能看起来像这样

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

您的xml映射看起来像这样

<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>

很抱歉仅提供 N Hibernate的示例,这是我每天使用的内容,您应该能够在Hibernate中轻松应用此功能