我有一个名为PRODUCT的SQL表,有2列(CODE VARCHAR和PATH VARCHAR)。 CODE中的最后4个字符用于识别产品的颜色。我正在使用像这样的光滑2.0:
import scala.slick.driver.H2Driver.simple._
case class Product(code: String, path: String, color: String)
class Products(tag: Tag) extends Table[Product](tag, "PRODUCTS") {
def code = column[String]("CODE", O.PrimaryKey)
def path = column[String]("PATH")
def * = (code, path, "LAST 4 CHARS OF CODE") <> (Product.tupled, Product.unapply)
}
我的问题是,我希望将case类中的颜色作为分隔属性。有没有办法从类Product中的CODE列中获取String值(以及最后4个字符)?谢谢答案
答案 0 :(得分:0)
最简单的答案是创建一个computed column in H2并在Slick中定义一个颜色列:
class ProductTable(tag: Tag) extends Table[Product](tag, "PRODUCTS") {
def code = column[String]("CODE", O.PrimaryKey)
def path = column[String]("PATH")
def color = column[String]("COLOR", O.DBType("VARCHAR AS SUBSTR(PATH, LENGTH(PATH) - 3)"))
def * = (code, path, color) <> (Product.tupled, Product.unapply)
}
答案 1 :(得分:0)
Slick没有附带用于子字符串操作的函数。您可以将其定义为val substr = SimpleFunction.binary...
(请参阅http://slick.typesafe.com/doc/2.0.0/userdefined.html)。然后,您可以定义def color = substr(code, code.length-4)
。您可能不希望将其包含在*
投影中,因为相应的表ddl可能会失败(如果您需要它)。相反,您可以使用单独的投影(称为*
以外的其他投影)。