使用 sorm 框架仅获取一个字段

Posted

技术标签:

【中文标题】使用 sorm 框架仅获取一个字段【英文标题】:Fetching only one field using sorm framework 【发布时间】:2016-08-18 13:28:01 【问题描述】:

是否可以使用SORM Framework 从数据库中仅获取一个字段?

我想要的纯 SQL 是:

SELECT node_id FROM messages

我似乎无法正常地重现这一点。我知道这可能违反了 sorm 的工作方式,但现在我有两张巨大的桌子,上面有不同类型的消息。我被要求从两个表中获取所有唯一的 node_ids。

我知道我可以使用 sorm 查询两个表并解析所有数据,但我想让数据库正常工作。显然,如果在单个 db 调用中只能获得唯一的 node_ids,那就更好了。

现在只查询和解析所有内容,花费的时间太长了。

【问题讨论】:

【参考方案1】:

似乎没有对您想要做的事情的 ORM 支持,除非 node_id 恰好是您的 Message 对象的主键:

val messages = Db.query[Message].fetchIds()

在这种情况下,您不必担心它是 UNIQUE,因为根据定义,主键是唯一的。或者,您可以运行自定义 SQL 查询:

Db.fetchWithSql[Message]("SELECT DISTINCT node_id FROM messages")

请注意,后者可能输入错误:您必须针对您的数据库进行尝试。您可能需要 fetchWithSql[Int] 或其他一些变体:不清楚 SORM 在未查询主键的情况下会做什么。

【讨论】:

您好,感谢您的帮助。不幸的是 node_id 不是唯一的,也不是任何表的主要 id。另外我认为 SORM 的fetchWithSql 限制是它只能查询 id 列。我试过了,它给了我assertion failed: The sql-statement must select only the id-column @MikeJones 啊,那你可能不走运了。 SORM 在这个时刻似乎是一个非常不发达的框架,遗憾的是,它缺少很多你认为显而易见的东西。除了fetchWithSql之外,我真的在他们的来源中找不到任何暗示这是可能的东西。

以上是关于使用 sorm 框架仅获取一个字段的主要内容,如果未能解决你的问题,请参考以下文章

SORM框架01

如何从 SORM 表定义中排除类字段?

无法使用 sorm 访问字段

如何将 SORM 框架与 Play 框架一起使用?

播放框架 sorm intellij - 无法解析符号 sorm

启动使用 SORM 框架的 Scala 项目时出错