【问题标题】:Finding a list of related objects by ID按 ID 查找相关对象的列表
【发布时间】:2018-11-30 18:51:14
【问题描述】:

假设我有一个名为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)

这可能吗?

我正在运行 Apache Cayenne ORM 4.1 版。

【问题讨论】:

  • 4.1版到底是什么?您是否尝试阅读:cayenne.apache.org/docs/3.0/objectidquery.html
  • @sofend:抱歉,我没有添加 Apache Cayenne。关于您的链接,我确实看过,但那是为了按 ID 查找一个对象,而不是按 ID 查找对象列表。

标签: java kotlin orm apache-cayenne


【解决方案1】:

正如我发布问题一样,我找到了答案。您需要像这样使用Property 对象创建Expression

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

上面的代码是用 Kotlin 编写的,但从 Java 的角度来看也很容易理解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多