0

私の場合、postgres に列挙型があります。

create type my_type as enum (string value);

そして、これを列タイプとして使用するいくつかのテーブル:

create table A (
...
t my_type,
...
)

postgres では、次のようにテーブル A に新しいレコードを挿入できます。

insert into A values(..., 'my_type_value', ...);

Scalikejdbc は正しい sql を生成します。

 insert into A (...) values (..., 'my_type_value', ...)

しかし、エラーで失敗します:

エラー: 列 "t" は my_type 型ですが、式は文字可変型です ヒント: 式を書き直すか、キャストする必要があります。

私はこれをやろうとしました:

object MyType extends Enumeration {...}
case class A(..., t: MyType, ...)
object A extends SQLSyntaxSupport[A] {
  def apply(rs: WrappedResultSet): A = A(..., rs.getString('t'), ...)
}

また、scala コードの列挙型に暗黙的な変換を追加しようとしました。

object MyType extends Enumeration {
   implicit def stringToValue...
   implicit def valueToString ...
}

しかし、それも役に立ちませんでした。

挿入コードは次のようになります。

 withSQL {
      insertInto(A).namedValues(
        ...
        A.column.t-> e.t, // e - passed entity into insert fun
        ....
      )
    }.update().apply()
4

1 に答える 1