解决报错:DynamoDBMappingException: not supported; requires @DynamoDBTyped or @DynamoDBTypeConverted

DynamoDB中复合键使用

异常如下:DynamoDBMappingException: not supported; requires @DynamoDBTyped or @DynamoDBTypeConverted
在这里插入图片描述

解决办法:
把@Id注解的属性getter setter方法去掉。
我之前用的Lombok实体类上方加的@Data默认给userVerificationId添加了getter setter方法,去掉就可以了。

在这里插入图片描述

关于错误: No field found for annotation interface org.springframework.data.annotation.Id!

这是@Id注解没使用对
在这里插入图片描述

正确的定义如下
UserVerification类:着重于UserVerificationId映射
package com.weavewan.sdwan.user.domain;

import com.amazonaws.services.dynamodbv2.datamodeling.*;
import org.springframework.data.annotation.Id;

@DynamoDBTable(tableName = "userVerification")
public class UserVerification {
    @Id
    private UserVerificationId userVerificationId;

    @DynamoDBIndexHashKey(globalSecondaryIndexName = "codeIndex", attributeName = "code")
    private String code;

    @DynamoDBAttribute(attributeName = "expireTime")
    private Integer expireTime;

    @DynamoDBHashKey(attributeName = "email")
    public String getEmail() {
        return userVerificationId != null ? userVerificationId.getEmail() : null;
    }

    public void setEmail(String email) {
        if (userVerificationId == null) {
            userVerificationId = new UserVerificationId();
        }
        userVerificationId.setEmail(email);
    }

    @DynamoDBRangeKey(attributeName = "createTime")
    public String getCreateTime() {
        return userVerificationId != null ? userVerificationId.getCreateTime() : null;
    }

    public void setCreateTime(String createTime) {
        if (userVerificationId == null) {
            userVerificationId = new UserVerificationId();
        }
        userVerificationId.setCreateTime(createTime);
    }

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public Integer getExpireTime() {
        return expireTime;
    }

    public void setExpireTime(Integer expireTime) {
        this.expireTime = expireTime;
    }
}
注意:UserVerificationId类只放 分区键和排序键
package com.weavewan.sdwan.user.domain;

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey;
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey;

import java.io.Serializable;

/**
 * @author wshanshi
 * @version 1.0
 * @date 2020/2/20 10:45
 */
public class UserVerificationId implements Serializable {
    private static final long serialVersionUID = 1L;

    private String email;

    private String createTime;

    @DynamoDBHashKey
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
    @DynamoDBRangeKey
    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
}

接口定义
@EnableScan
public interface UserVerificationRepository extends CrudRepository<UserVerification, UserVerificationId> {
}

到这里就可以使用了,如下是UserVerification表里的数据。
在这里插入图片描述

发布了78 篇原创文章 · 获赞 23 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_43770545/article/details/104408163
今日推荐