为Scala播放2.2:Anorm和java.lang.Integer大小限制

时间:2013-10-13 20:21:08

标签: scala playframework-2.0 anorm

我注意到这样一个表达式:

DB.withConnection { implicit conn =>
  SQL("Select id, description FROM my_table WHERE id = {id}").on("id" -> 4)()
    .map {
      // TODO: Notice Integer.MAXVALUE = 2,147,483,647
      // How can I handle a value retrieved from a int(11) column ?
      case Row(id:Integer, Some(description:String) ) => 
            new UserInquiry(id.toLong, description)
    }

转换从java.lang.Integer中的'id'列检索的值。除非我将列的大小定义为长度超过9位,否则这很好。这将允许我的表列存储大于java.lang.Integer类可以容纳的值。

我们如何克服这个限制?解决方案是将Anorm转换为BigInt或Long,但是如何?

1 个答案:

答案 0 :(得分:1)

int(11)中的11只是表示/格式化,因此int将是4个字节并且具有与java Integer相同的最小值和最大值。如果列是BigInt,则必须将其映射到Long,因为它可能大于Integer可以表示的值。

What is the size of column of int(11) in mysql in bytes?