ikeike443のブログ

ソフトウェアビジネスに関心がある系のブログ

SquerylのPostgresqlAdapterはSerial型に対応していないのかな?

PostgresqlのSerial型って、{テーブル名}_{カラム名}_seqという名前のシーケンスを暗黙的に作った上で自動的に内部でnextvalを呼び出してくれるものだと思うのですが、違いましたっけ。

結構理解が適当なので、間違っているのかもしれない。。


ともあれ、SquerylというORMを使っていたところ、シーケンス名を作り出す関数が下記のように実装されていてSerial型に対応できない。

//org.squeryl.internals.DatabaseAdapter.scala
def createSequenceName(fmd: FieldMetaData) =
    "s_" + fmd.parentMetaData.viewOrTable.name + "_" + fmd.columnName


ので、下記のようにオーバーライドしてやった。

class PgAdapter extends PostgreSqlAdapter {
  override def createSequenceName(fmd: FieldMetaData) =
    fmd.parentMetaData.viewOrTable.name + "_" + fmd.columnName + "_seq"
}