JPA(在这种情况下为 Eclipselink)是否总是返回 IndirectList 实体有一个列表?该列表可以吗?还是应该将其转换为另一个列表(可能是链表)?
2 回答
分析
如果我们查看 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,因为它是透明管理的。
由于List
是一个接口,JPA 提供者可以自由地返回任何实现。EclipseLink 重新运行使用IndirectList
a的List
位置。这很好,因为它IndirectList
是一个List
.
为了记录或将来参考,使用 JPA 接口通常是最佳实践。