

以下の様なテーブルとクラスがあるとします。

sql

[code]

    create table `sample`.`member` (id serial, name varchar(64));
    
[/code]

class

[code]

    case class Member(id: Long, hoge: String)
    
[/code]

Memberテーブルのnameカラムを、Memberクラスのhogeにマッピングしたいと思っているのですが方法はありますか？

試した実装は以下です。

[code]

    package domain.models
    
    import scalikejdbc.WrappedResultSet
    import scalikejdbc.ResultName
    import skinny.orm.SkinnyMapper
    
    
    case class Member(id: Long, hoge: String)
    
    object Member extends SkinnyMapper[Member] {
      override lazy val defaultAlias = createAlias("m")
      override def extract(rs: WrappedResultSet, n: ResultName[Member]): Member = {
        new Member(
          id = rs.get(n.id),
          hoge = rs.get(n.name)
        )
      }
    }
    
[/code]

この様な実装をし、以下を実行しました。

[code]

    Member.findById(1)
    
[/code]

すると、

[code]

    domain.models.Member#name not found. Expected fields are #id, #hoge.
    
[/code]

というエラーがでます。


CC BY-SA 3.0
2016-02-29T10:08:10.327
22661
2016-02-29T10:24:31.573
14387
question
scala playframework scalikejdbc
Skinny-ORMでコンストラクタ引数とテーブルのカラム名が一致しない場合の定義の仕方を教えてください。


DBのカラム名とモデルのプロパティ名が違う時はこの変数をオーバーライドしてあげると変換できます。

[code]

    override val nameConverters = Map("hoge" -> "name")
    
[/code]

Map("モデルのカラム名" -> "DBのカラム名")

[code]

    package domain.models
    
    import scalikejdbc.WrappedResultSet
    import scalikejdbc.ResultName
    import skinny.orm.SkinnyMapper
    
    
    case class Member(id: Long, hoge: Option[String])
    
    object Member extends SkinnyMapper[Member] {
      override lazy val defaultAlias = createAlias("m")
      override val nameConverters = Map("hoge" -> "name")
      override def extract(rs: WrappedResultSet, n: ResultName[Member]): Member = {
        new Member(
          id = rs.get(n.id),
          hoge = Some(rs.get(n.hoge))
        )
      }
    }
    
[/code]


CC BY-SA 3.0
2016-02-29T10:24:31.573
22664
2016-02-29T10:24:31.573
14387
22661
answer