通过ID查找相关对象的列表

时间:2018-11-30 18:51:14

标签: java kotlin orm apache-cayenne

例如,假设我有一个名为PersonAnimal的桥表。我想搜索所有具有给定动物ID的人。到目前为止,查询如下:

Animal animal = getById(Animal.class, animalId)
ObjectSelect
    .query(PersonAnimal.class)
    .where(PersonAnimal.ANIMAL.eq(animal))
    .select(context)

但是,以上代码段的第一行显示我首先必须从数据库中检索相关对象。我想摆脱该数据库查找,而是做类似的事情:

ObjectSelect
    .query(PersonAnimal.class)
    .where(PersonAnimal.ANIMAL_ID.eq(animalId)) // <- Find by ID instead
    .select(context)

有可能吗?

我正在运行4.1版的Apache Cayenne ORM。

1 个答案:

答案 0 :(得分:0)

当我发布问题时,我找到了答案。您需要使用Expression对象创建一个Property,如下所示:

val findByIdExpr = Property.create(PersonAnimal.ANIMAL.name, Long::class.java).eq(yourId)
val gotList = ObjectSelect
   .query(PersonAnimal.class)
   .where(findByIdExpr)
   .select(context)

以上代码位于Kotlin中,但从Java角度也很容易理解。