jpa会回收什么collections品?
JPA(在这种情况下是Eclipselink)是否总是返回IndirectList,其中Entity有一个List? 好的那个列表或它应该转换为另一个列表(也许是链表)?
分析
如果我们查看EclipseLink的IndirectList的API ,它会说:
要使用IndirectList:使用IndirectList(jdk1.1)或Collection / List / Vector(jdk1.2)类型声明相应的实例变量。
当从数据库中读取包含域对象时,TopLink将在实例变量中放置IndirectList。 将第一条消息发送到IndirectList后,将从数据库中提取内容,并恢复正常的Collection / List / Vector行为。
如果我们查看IndirectList源代码 ,我们将看到,所有工作都被委托给它的原始集合,就像API所说的那样。
答案
JPA(在这种情况下是Eclipselink)是否总是返回IndirectList,其中Entity有一个List?
是的,它总是返回包含IndirectList的指定集合。 由于它将所有内部工作委托给包装集合,因此它保留了它的工作方式。
好的那个列表或它应该转换为另一个列表(也许是链表)?
是的,可以使用IndirectList。 您不进行转换,您只需定义所需的任何类型的集合,而不必担心IndirectList,因为它是透明管理的。
由于List
是一个接口,JPA提供者可以自由地返回任何实现。 EclipseLink重新运行使用List
的IndirectList
。 这完全没问题,因为IndirectList
是一个List
。
为了记录或将来参考,通常最好使用JPA接口。