这与我之前讨论的通过外键ID查找行的问题有点相关。这个问题旨在通过主键ID查找对象列表。
在下面的代码中,我试图通过提供id列表来查找Person
对象的列表。但是ApacheCayenne不能做到这一点,因为ID_PK_COLUMN
是一个字符串,而不是Property
。
ObjectSelect
.query(Person::class.java)
.where(Person.ID_PK_COLUMN.in(listOfIds)) // <- Cannot perform this
.select(context)
如何按ID查找Person对象列表?
我知道我们有Cayenne.objectForPK
,但它只找到一个对象。
使用Apache Cayenne 4.1。
由于ID在Cayenne中通常不会映射为对象属性,并且"ID_PK_COLUMN"是"db:"属性,因此需要为"where"方法参数构建一个"db"表达式。有一个API:
ExpressionFactory.inDbExp(Person.ID_PK_COLUMN, listOfIds)
(顺便说一句,Property
只是ExpressionFactory
之上的句法糖(