在引用 属性 时,我能否让 TableView 列使用 Kotlin Exposed 事务?
Can I get a TableView column to use a Kotlin Exposed transaction when referencing a property?
使用TornadoFX时,TableView的列是这样建立的:
tableview(list<ObjectType>) {
column("ColumnName", ObjectType::property)
...
}
这通常没问题,但在我的例子中,我使用的是 Kotlin Exposed 实体,该实体使用对另一个实体的引用。发生这种情况时,如果您想使用该引用,则必须将其包含在事务中。
示例:
val company = transaction { employeeObject.companyObject }
如果您不在事务中包装这样的调用,则会引发错误。似乎没有明显的方法来覆盖列访问 属性 的方式,所以我想知道它是否存在。
现在,我已经尝试将我的实体包装在另一个 class 中,它将预先完成所有必要的交易,但是当需要映射的实体数量达到数千时,它会导致我的程序基本上陷入停滞状态。如果需要,我可以回到过去的样子,没有参考,只有另一个实体的普通旧 ID 号。然后该列的单元格格式将尝试将公司与之前抓取的列表中的所有公司相匹配。虽然我不太喜欢这个解决方案,它看起来更丑陋且不够优雅,但它比映射实体快得多。我试图实现的目标也有可能会导致其自身的减速。我只是想知道这是否可行,这样我至少可以看到它有多快。
感谢 Edvin,提醒我专栏在 UI 线程上工作,它不应该承担繁重的工作!我尝试了一些其他的映射,希望瓶颈是我正在做的交易量,但这对速度没有帮助。所以我认为让我的视图预先检索所有公司的列表,然后让我的列在该列表中找到公司是可行的方法。不那么漂亮,但不要慢下来!
但要正式回答我自己的问题:没关系,不要在UI 线程中尝试。这是不好的做法,会降低性能。
使用TornadoFX时,TableView的列是这样建立的:
tableview(list<ObjectType>) {
column("ColumnName", ObjectType::property)
...
}
这通常没问题,但在我的例子中,我使用的是 Kotlin Exposed 实体,该实体使用对另一个实体的引用。发生这种情况时,如果您想使用该引用,则必须将其包含在事务中。
示例:
val company = transaction { employeeObject.companyObject }
如果您不在事务中包装这样的调用,则会引发错误。似乎没有明显的方法来覆盖列访问 属性 的方式,所以我想知道它是否存在。
现在,我已经尝试将我的实体包装在另一个 class 中,它将预先完成所有必要的交易,但是当需要映射的实体数量达到数千时,它会导致我的程序基本上陷入停滞状态。如果需要,我可以回到过去的样子,没有参考,只有另一个实体的普通旧 ID 号。然后该列的单元格格式将尝试将公司与之前抓取的列表中的所有公司相匹配。虽然我不太喜欢这个解决方案,它看起来更丑陋且不够优雅,但它比映射实体快得多。我试图实现的目标也有可能会导致其自身的减速。我只是想知道这是否可行,这样我至少可以看到它有多快。
感谢 Edvin,提醒我专栏在 UI 线程上工作,它不应该承担繁重的工作!我尝试了一些其他的映射,希望瓶颈是我正在做的交易量,但这对速度没有帮助。所以我认为让我的视图预先检索所有公司的列表,然后让我的列在该列表中找到公司是可行的方法。不那么漂亮,但不要慢下来!
但要正式回答我自己的问题:没关系,不要在UI 线程中尝试。这是不好的做法,会降低性能。