Scala 如何在Slick中动态检查数据库品牌/类型

Scala 如何在Slick中动态检查数据库品牌/类型,scala,slick,slick-2.0,Scala,Slick,Slick 2.0,我在生产中使用Oracle,在单元测试中使用H2。由于我们使用Oracle Spatial,我需要以某种方式表示几何体对象,这在Oracle和H2中是不同的。我不需要对数据库中的几何体类型进行操作(或者至少我不希望这样做:-))。因此,我将仅将几何体映射到H2中的文本字段,以便支持输入/输出 我想象这样映射几何体列: def shape = if (<database is oracle) column[Geometry]("SHAPE") (geometry2SdoGeometr

我在生产中使用Oracle,在单元测试中使用H2。由于我们使用Oracle Spatial,我需要以某种方式表示几何体对象,这在Oracle和H2中是不同的。我不需要对数据库中的几何体类型进行操作(或者至少我不希望这样做:-))。因此,我将仅将几何体映射到H2中的文本字段,以便支持输入/输出

我想象这样映射几何体列:

def shape = if (<database is oracle)
    column[Geometry]("SHAPE") (geometry2SdoGeometryMapper(TmcGeometry.srid))
  else if (<database is oracle>)
    column[Geometry]("SHAPE", O.DBType("text")) (geometry2TextMapper)
  else 
    sys.error(s"Unimplemented database type $<database type>) 

def shape=if(一种方法是将此
shape
方法抽象为一个更高阶的光滑组件,该组件带有一个类型参数和适当的子类型。类似的方法可以工作:

trait DBtype {
  val GeometryMapper: {the expected type}
  val Driver: Driver
}
GeometryRepository[B <: DBType] {
  def shape = B.GeometryMapper
}
trait Oracle extends DBtype {
  override val GeometryMapper = column[Geometry]("SHAPE") (geometry2SdoGeometryMapper(TmcGeometry.srid))
  override val Driver = OracleDriver
}
trait-DBtype{
val GeometryMapper:{所需类型}
val驱动程序:驱动程序
}

GeometryRepository[B您可以执行
driver.isInstanceOf[OracleDriver]
driver.isInstanceOf[H2Driver]