【问题标题】:Finding a list of objects by Primary Key ID - Apache Cayenne按主键 ID 查找对象列表 - Apache Cayenne
【发布时间】:2018-11-30 23:21:41
【问题描述】:

这与我之前的 question 有点相关,我在其中讨论了通过外键 ID 查找行。本题旨在按主键 ID 查找对象列表。

在下面的代码中,我试图通过提供 id 列表来查找 Person 对象列表。但是 Apache Cayenne 不能这样做,因为 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。

【问题讨论】:

  • 你从中得到了什么:val expression = Person.ID_PK_COLUMN.in(listOfIds)
  • @AndreArtus: 好吧,Person.ID_PK_COLUMN 返回一个String,所以.in() 方法对它不起作用,这就是为什么我写了我不能在那个特定上执行.in()表达。我认为@andrus 解决了我的答案。

标签: java kotlin orm apache-cayenne


【解决方案1】:

由于在 Cayenne 中 id 通常不映射为对象属性,并且“ID_PK_COLUMN”是一个“db:”属性,因此您需要为“where”方法参数构建一个“db”表达式。有一个 API:

ExpressionFactory.inDbExp(Person.ID_PK_COLUMN, listOfIds)

(顺便说一句,Property 只是ExpressionFactory 之上的语法糖)

【讨论】:

  • 感谢您的回答,它有效。 Apache Cayenne 是如此强大和快速,我希望更多的人知道它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多