Spring Data DynamoDB实现DynamoDB JSON与Java ORM映射报错如何解决
错误原因
核心问题是注解混用和JPA无法识别自定义嵌套类型,具体分两点:
- 你在同一个实体类上同时标注了JPA的
@Entity注解和DynamoDB的@DynamoDBTable注解,Spring启动时会同时加载JPA(Hibernate)和DynamoDB的映射逻辑。@DynamoDBDocument是DynamoDB专属的嵌套文档注解,仅对Spring Data DynamoDB生效,Hibernate完全无法识别In这个自定义类型要怎么映射为关系型数据库的字段,所以抛出类型识别失败的异常。 - 代码本身存在语法错误:
getIn()方法中返回了不存在的变量insights,应该返回成员变量in。
排查解决步骤
- 首先明确你要使用的持久层框架:如果是对接DynamoDB,直接移除类上的
@Entity注解,不要和Spring Data JPA混用,DynamoDB是NoSQL数据库,不需要JPA的ORM映射逻辑。 - 修复代码语法错误,把
getIn()方法的返回值改为in:
@DynamoDBAttribute(attributeName="in") public In getIn() { return in; }
- 如果你确实需要同时对接关系型数据库和DynamoDB,不要用同一个实体类做两种映射,拆分两个独立的DTO/实体类分别对应JPA和DynamoDB的映射规则。JPA那边如果要存嵌套结构,可以用
@Embeddable和@Embedded注解标注嵌套类,或者用@Type注解指定JSON序列化类型把嵌套对象转为字符串存到单列。 - 检查启动类的包扫描配置,不要让JPA的
@EntityScan扫描到DynamoDB的实体类,把两类实体放到不同的包下分开扫描。
内容的提问来源于stack exchange,提问作者Jagadheeswaran Mohan
相关产品推荐
相关产品推荐

