使用原始 "base" 比较 Slick MappedColumnType

Comparing Slick MappedColumnType using raw "base"

我有一个自定义列类型 UniqueId,我用它来将 CHAR(36) UUIDS 映射到特定类型。由于我的代码的结构,每个 ID 都有一个特定的列类型(CustomerIdOrderId)等,这也确保我们不会在代码中比较苹果和橘子(尽管是相同的基础 UUID)。

然而,在某些情况下,我们在表中有一个 "generic" targetId,它可以指向多个表中的一个 ID。因此,targetId 类型就是 String.

使用 Slick,目前我们t1.targetId === t2.customerId.asColumnOf[String] 是为了取悦编译器。问题在于,这会转换为 t1.targetId = CONCAT(t2.customerId),这会完全降低性能(使用 MySQL),因为任何索引都会出现 window.

我的问题:有没有办法告诉 Slick "just use this column as-is without doing anything",有点像 "raw" 比较,而不求助于原始 SQL 查询?

我们尝试了 t2.customerId.asInstanceOf[String] 但它并不总是适用于我们的情况(并且通常不安全)。

我挖掘了一下,这是我发现的工作:

Rep.forNode[String](t2.customerId.toNode.:@(ScalaBaseType[String])) === t1.targetId

它在 SQL 方面产生了一个简单的平等,作为 f*** 丑陋的权衡...:-D

在我这边,我测试了一个专栏,我为其提供了一个 BaseColumnType[T],我有点假设你也在做。