【问题标题】:Scala anorm retrieve inserted idScala异常检索插入的ID
【发布时间】:2013-02-04 21:24:05
【问题描述】:

我有一个 id 字段带有 autoid 的表。插入带有异常的行后,我想检索生成的 id。有什么想法吗?

 SQL(
    """
      insert into accom (id,places,lat,lon,permaname,country,defaultLanguage) values (
         {places}, {lat}, {lon}, {permaname}, {country}, {defaultLanguage}
      )
    """).on(
      'id -> id,
      'places -> places,
      'lat -> lat,
      'lon -> lon,
      'permaname -> permaname,
      'country -> country,
      'defaultLanguage -> defaultLanguage).executeUpdate()
}

【问题讨论】:

    标签: mysql scala playframework-2.0 anorm typesafe-stack


    【解决方案1】:

    在最新版本中,您需要一个标量:

       val newId = SQL(
          """
          insert into accom (places,lat,lon,permaname,country,defaultLanguage) 
          values ({places}, {lat}, {lon}, {permaname}, {country}, {defaultLanguage})
          """).on(
            'places -> places,
            'lat -> lat,
            'lon -> lon,
            'permaname -> permaname,
            'country -> country,
            'defaultLanguage -> defaultLanguage).executeInsert(scalar[Long].single)  
    

    【讨论】:

    • 这是正确答案。如果不使用标量参数,我会看到奇怪的列类型不匹配错误。
    【解决方案2】:

    executeInsert代替executeUpdate,返回值为id。

    【讨论】:

      【解决方案3】:

      使用executeInsert方法代替executeUpdate;它返回一个Option[T],其中T 是主键的类型。

      您可能想看看How to Retrieve the Primary Key When Saving a New Object in Anorm,它还向您展示了如何在不指定您想要生成的id 的情况下制定INSERT 语句。

      【讨论】:

        猜你喜欢
        • 2011-11-02
        • 2021-11-21
        • 1970-01-01
        • 2011-03-28
        • 1970-01-01
        • 1970-01-01
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多