You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDbImmutable与DynamoDbBean注解的区别咨询

DynamoDbImmutable 与 DynamoDbBean 注解的核心区别

定位与适用类类型

  • @DynamoDbImmutable:专为不可变数据类设计,对应Kotlin中用val定义属性的data class,或Java中字段为final且无setter的类。它要求类的所有属性通过构造器初始化,全程只读,适合需要保证数据不可篡改的场景,比如值对象、事件溯源数据。
  • @DynamoDbBean:面向可变JavaBean风格类,对应Kotlin中用var定义属性的类,或Java中带标准getter/setter的类。依赖属性访问器完成序列化/反序列化,支持对象创建后修改属性值,适配传统业务中需要动态更新实体的场景。

使用限制与示例

@DynamoDbImmutable 用法

必须配合全参数构造器使用,Kotlin的data class默认满足该要求,属性全部为只读:

@DynamoDbImmutable
data class ImmutableUser(
    @get:DynamoDbPartitionKey
    val userId: String,
    val username: String,
    val email: String
)

这类实例创建后无法修改任何属性,从根源避免数据意外变更。

@DynamoDbBean 用法

需要提供属性的getter,setter可选,若需反序列化填充数据则通常需要,属性支持可变:

@DynamoDbBean
data class MutableUser(
    @get:DynamoDbPartitionKey
    var userId: String? = null,
    var username: String? = null,
    var email: String? = null
)

实例创建后可随时修改username、email等属性,适配业务中需要动态更新实体的场景。

序列化/反序列化机制差异

  • @DynamoDbImmutable:SDK通过反射调用类的全参数构造器创建实例,读取DynamoDB数据时将字段值传入构造器;写入时提取构造器参数值映射到DynamoDB字段。
  • @DynamoDbBean:SDK通过getter方法读取属性值写入DynamoDB;读取数据时通过setter方法(或直接设置字段)填充对象属性。

内容的提问来源于stack exchange,提问作者blahblah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:22:05