2012-09-25 35 views
7

Tôi cần ánh xạ một lớp User cho Amazon DynamoDB. Một trong các thuộc tính trên đối tượng User là AccountType (một enum). Làm cách nào để xử lý việc này? Dưới đây là enum và mã tôi đã thử.Amazon DynamoDB mapping enums

public enum AccountType { 
    TYPE_A, 
    TYPE_B 
} 

-

@DynamoDBAttribute(attributeName="AccountType") *<< THIS FAILS* 
public AccountType getAccountType() { 
    return accountType; 
} 

Bất kỳ trợ giúp sẽ được đánh giá cao.

+0

Câu hỏi có thể được cải thiện bằng cách chỉ định thông báo lỗi hoặc mã lỗi: Bản ghi không được duy trì? Có lỗi xảy ra tại thời gian xây dựng? Trong thời gian chạy? Trong một thử nghiệm cụ thể? –

Trả lời

11

Các cấp cao API (các Object Persistence mô hình) cho Amazon DynamoDB cung cấp bởi AWS SDK for Java không hỗ trợ enum chưa, xem Supported Data Types:

Amazon DynamoDB hỗ trợ các kiểu dữ liệu nguyên thủy sau và nguyên thủy các lớp bao bọc.

  • Chuỗi
  • Boolean, boolean
  • Byte, byte
  • ngày (như ISO8601 chuỗi millisecond chính xác, chuyển sang UTC)
  • Lịch (như ISO8601 chuỗi millisecond chính xác, chuyển sang tính theo giờ UTC)
  • Dài, dài
  • Số nguyên, int
  • Đôi, đôi
  • phao, nổi
  • BigDecimal
  • BigInteger

Tuy nhiên, Amazon DynamoDB hỗ trợ các kiểu dữ liệu tùy ý về nguyên tắc, vì vậy bạn có thể có thể làm việc xung quanh giới hạn đó, xem Mapping Arbitrary Data with Amazon DynamoDB Using the AWS SDK for Java Object Persistence Model để biết chi tiết :

Ngoài các loại Java được hỗ trợ [...], bạn có thể sử dụng các loại i n ứng dụng của bạn mà không có ánh xạ trực tiếp đối với các loại Amazon DynamoDB. Để lập bản đồ các loại này, bạn phải cung cấp triển khai chuyển đổi loại phức hợp của bạn thành một phiên bản của Chuỗi và ngược lại và chú thích phương thức truy cập loại phức tạp bằng cách sử dụng loại chú thích @DynamoDBMarshalling. [...]

16

AWS SDK hỗ trợ chú thích đặc biệt DynamoDBTypeConvertedEnum để chuyển đổi enum thành chuỗi.

@DynamoDBTypeConvertedEnum 
@DynamoDBAttribute(attributeName="AccountType") 
public AccountType getAccountType() { 
    return accountType; 
}