首页 > 解决方案 > 引用属性时,我可以获得 TableView 列以使用 Kotlin Exposed 事务吗?

问题描述

使用 TornadoFX 时,TableView 列的建立方式如下:

tableview(list<ObjectType>) {
   column("ColumnName", ObjectType::property)
   ...
}

这通常很好,但在我的情况下,我使用的是 Kotlin Exposed 实体,该实体使用对另一个实体的引用。发生这种情况时,如果您想使用该引用,则必须将其包围在事务中。

例子:

val company = transaction { employeeObject.companyObject }

如果您不在事务中包装这样的调用,则会引发错误。似乎没有一种明显的方法来覆盖列访问属性的方式,所以我想知道它是否存在。

现在,我已经尝试将我的实体包装在另一个类中,该类会预先完成所有必要的事务,但是当需要映射的实体数量达到数千时,它会导致我的程序基本上进入停滞状态. 如果需要,我可以回到以前的状态,即没有参考,而只是另一个实体的普通旧 ID 号。然后,该列的单元格格式将尝试将公司与之前抓取的列表中的所有公司进行匹配。虽然我不太喜欢那个解决方案,它看起来更丑也不优雅,但它比映射实体快得多。我想要实现的目标也有可能导致其自身的放缓。我只是想知道这是否可能,所以我至少可以看到它有多快。

标签: kotlintornadofxkotlin-exposed

解决方案


谢谢,Edvin,提醒我列在 UI 线程上工作,它不应该做繁重的工作!我尝试了一些其他的映射方法,希望阻塞点是我正在做的交易量,但这对速度没有帮助。所以我认为让我的视图预先检索所有公司的列表,然后让我的列在该列表中找到公司是要走的路。不那么漂亮,但没有慢下来!

但是要正式回答我自己的问题:没关系,不要在UI线程中尝试。这是不好的做法,会影响性能。


推荐阅读