1

JPA(在这种情况下为 Eclipselink)是否总是返回 IndirectList 实体有一个列表?该列表可以吗?还是应该将其转换为另一个列表(可能是链表)?

4

2 回答 2

3

分析

如果我们查看 EclipseLink 的IndirectList 的 API,它会说:

要使用 IndirectList:使用 IndirectList (jdk1.1) 或 Collection/List/Vector (jdk1.2) 类型声明适当的实例变量。

当从数据库中读取包含域对象时,TopLink 将在实例变量中放置一个 IndirectList。将第一条消息发送到 IndirectList 后,从数据库中获取内容并恢复正常的 Collection/List/Vector 行为。

如果我们查看IndirectList sources,我们会看到,所有的工作都委托给它的原始集合,就像 API 说的那样。

答案

JPA(在这种情况下为 Eclipselink)是否总是返回 IndirectList 实体有一个列表?

是的,它总是返回用 IndirectList 包装的指定集合。由于它将所有内部工作委托给包装的集合,因此它保留了它的工作方式。

该列表可以吗?还是应该将其转换为另一个列表(可能是链表)?

是的,可以使用 IndirectList。您无需转换,您只需定义所需的任何类型的集合,无需担心 IndirectList,因为它是透明管理的。

于 2012-06-11T07:42:47.020 回答
2

由于List是一个接口,JPA 提供者可以自由地返回任何实现。EclipseLink 重新运行使用IndirectLista的List位置。这很好,因为它IndirectList是一个List.

为了记录或将来参考,使用 JPA 接口通常是最佳实践。

于 2012-06-11T08:04:36.857 回答