8
votes

Comment utiliser la dynamodbmapper d'Amazon à Scala?

J'ai des difficultés à utiliser dynamodbmapper d'Amazon dans le code Scala. Le point de collage principal consiste à reconnaître la JVM pour reconnaître @Dynamodbhashashashkeke quand il est utilisé dans une classe de cas, comme:

Classe de boîtier MyCoolCaseclass (@dynamodbhashashkey (attributename = "my_id") myID: string) {}

Tous les pointeurs de quelqu'un qui a intégré cette bibliothèque client dans un projet Scala? (J'espère que vous n'êtes pas simplement revenir à l'API de bas niveau, bien que cela puisse être une décision décente une fois épuisé mes options avec le mappeur).


0 commentaires

3 Réponses :


10
votes

Le mappeur Dynamodb utilise la réflexion pour trouver les getters et les setters. Le SDK assume des conventions de style Java, c'est-à-dire que vos getters et vos setters commencent par "GET" ou "IS", et les configurateurs commencent par "SET". Vous pouvez voir le code de réflexion sur GitHub .

J'ai été capable de le faire fonctionner, mais cela ressemble à écrire Java: ( P>

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

  @DynamoDBHashKey
  def getId() = id
  def setId(_id: Integer) = id = _id
}


0 commentaires

10
votes

Je devais faire cela:

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
}


3 commentaires

@BeanProperty est le moyen «officiel» d'interagir avec toute bibliothèque de réflexion qui vous attend de suivre les conventions JavaBeans.


Merci pour cette réponse très utile! J'ai rencontré des problèmes lorsque vous utilisez des valeurs booléennes. Plus précisément, la ligne @boolantanbeanproperty var rockstar: boolean = true va écrire le champ dynamodb rockstar correctement, mais je ne peux pas obtenir la propriété à nommer Isrokstar . Si j'essaie @boolantanbeanProperty var iSrockstar: boolean = true , le mapper écrit les deux rockstar et isrockstar . Ajouter @dynamodbattribute (attributename = "isrockstar") ci-dessus ne vous aide pas non plus. Des pensées?


@JOSHPADNICK Voir le corps de réponse de Matte ci-dessus: Le SDK assume des conventions de style Java, c'est-à-dire que vos getters et vos configuriseurs commencent par "GET" ou "est". Je ne pense pas que vous puissiez nommer votre propriété avec le commencement est .



0
votes

Cela fonctionne pour moi, y compris le boolean xxx


0 commentaires