Hibernate返回PersistentBag而不是List

8

我有以下两个实体之间的关系。当我从仓库获取OutletProductVariety对象时,即使使用了Eager fetchtype,价格仍以PersistentBag的形式而不是List的形式呈现。

@Entity
public class OutletProductVariety  {
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  Long id;

  @ManyToOne
  @JoinColumn(name = "varietyId")
  Variety variety;

  @OneToMany(mappedBy = "outletVariety", fetch = FetchType.EAGER)
  List<Price> price;
}

并且

@Entity
public class Price {

  @Id
  @GeneratedValue(strategy=GenerationType.AUTO)
  Long Id;

  @ManyToOne
  @JoinColumn(name="outletVareityId")
  private OutletProductVariety outletVariety;

  private Double price;
}

如何获取价格列表而不是PersistentBag?

1
你有什么问题? - mrkernelpanic
@mrkernelpanic 我该如何获取价格列表而不是 PersistentBag? - meGaMind
1
能否提及正在使用的JPA提供程序?因为这只会发生在特定的JPA提供程序中,所以“JPA”不会返回任何内容;您的提供程序是什么。 - user3973283
1个回答

6

看一下Hibernate的PersistentBag

一个无序、无键值、可以多次包含同一个元素的集合。Java集合API中没有"Bag"这种类型,大多数开发者似乎使用List来表示bag语义,因此Hibernate也遵循了这种惯例。

public class PersistentBag extends AbstractPersistentCollection implements List

protected List bag;

它实现了java.util.List;,因此基本上是一个List,并在内部包装了您的List。
这只是Hibernate表示您的List的方式。

5
请注意,PersistentBag 违反了 equals 的约定,因此 normalList.equals(persistentBagList) => true,但 persistentBagList.equals(normalList) => false。详情请参见:https://hibernate.atlassian.net/browse/HHH-5409。 - thomasvakili

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接