我在生产中使用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>)
答案 0 :(得分:0)
一种方法是将此shape
方法抽象为更高阶的Slick组件,该组件采用具有相应子类型的类型参数。这样的事情可以奏效:
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
}
请参阅this example以了解数据库类型参数化。
答案 1 :(得分:0)
您可以执行driver.isInstanceOf[OracleDriver]
和driver.isInstanceOf[H2Driver]