8

我在 Scala 代码中使用 Amazon 的 DynamoDBMapper 时遇到问题。主要问题是让 JVM 在案例类中使用 @DynamoDBHashkey 时识别它,例如:

case class MyCoolCaseClass(@DynamoDBHashKey(attributeName = "my_id") myId: String) {}

来自将此客户端库集成到 Scala 项目中的人的任何指示?(我希望不要简单地回退到低级 API,尽管一旦用完 Mapper 的选项,这可能是一个不错的决定)。

4

3 回答 3

10

DynamoDB 映射器使用反射来查找 getter 和 setter。SDK 采用Java 风格的约定,即您的getter 和setter 以“get”或“is”开头,而setter 以“set”开头。你可以在 github 上看到反射代码。

我已经能够让它工作,但感觉就像在写 Java :(

@DynamoDBTable(tableName = "awesome_table")
class TheBestClass {
  private var id : Integer = _

  @DynamoDBHashKey
  def getId() = id
  def setId(_id: Integer) = id = _id
}
于 2013-08-14T21:55:58.333 回答
10

我不得不这样做:

import annotation.meta.beanGetter
import beans.BeanProperty

import com.amazonaws.services.dynamodbv2.datamodeling._

@DynamoDBTable(tableName="DEMOTAB")
case class DemoItem(  // it's a case class for the free stuff, but can be ordinary class
    @(DynamoDBHashKey @beanGetter)  // would not work without meta annotation
    @BeanProperty var id:String,    // must be var or mapper can't instantiate one

    @BeanProperty var number:Integer
) {
  def this() = this(null, null)     // needed by DynamoDB Mapper to instantiate
}
于 2014-07-26T20:57:56.437 回答
0

这对我有用,包括boolean

@DynamoDBTable(tableName = "User")
case class User(
               @(DynamoDBHashKey @field)
               @(DynamoDBAutoGeneratedKey @field)
               @BeanProperty var id: String,

               @(DynamoDBAttribute @field)
               @BeanProperty var firstName: String,

               @(DynamoDBAttribute @field)
               @BeanProperty var lastName: String,

               @(DynamoDBAttribute @field)
               @BeanProperty var active: Boolean
               )
{
  def this() = this(null, null, null, false)
}
于 2019-04-25T16:26:28.207 回答