如何在Spring Data Cassandra中使用UserDefinedType(UDT)来处理List<UDT>?

3
我在cql中创建了一个名为widgetData的UDT,对应于一个名为widgetData的POJO类。我想将其作为List在另一个域POJO类中使用。应该使用什么样的注释来实现?
@Table("dashboardManagement")
public class Dashboard implements Serializable {

    @Column("dashboardState")
    @CassandraType(type = DataType.Name.UDT, userTypeName = "widgetData")
    private List<widgetData> dashboardState;
....

上述代码无法正常工作。我需要为此编写一个单独的userTypeResolver吗?

能否告诉我哪里出了问题(错误信息、实际发生的情况),以及你的widgetData类的代码? - mp911de
嗨,你在这个问题上找到解决方案了吗? - giannisapi
你找到这个问题的解决方案了吗? - Ankur Jain
1个回答

2

我知道这个问题有点老了,但是我已经解决了它。

基本上,我有一个带有地址UDT的用户配置文件,而该UDT具有自己的POJOs/entity类。 UDT地址实体类使用了@UserDefinedType注释:

@UserDefinedType("address")
public class AddressEntity implements Serializable {
    private static final long serialVersionUID = 1817053316281666003L;

    @Column("mailto_name")
    private String mailtoName;
    private String street;
    private String street2;
    private String city;
...

用户实体使用了地址 UDT 实体:

@Table("user")
public class UserEntity implements Serializable {
    private static final long serialVersionUID = 4067531918643498429L;

    @PrimaryKey("user_id")
    private UUID userId;
    @Column("user_email")
    private String userEmail;
    @Column("first_name")
    private String firstName;
    @Column("last_name")
    private String lastName;
    @Column("addresses")
    private List<AddressEntity> addresses;
    ...

然后,将用户的地址数据映射到一个 UserEntity 对象 (userE) 上,并使用标准的存储库方法保存,这就是一个简单的问题了。
// save to DB
userRepo.save(userE);

您可以在此找到支持用户服务的所有内容:https://github.com/datastaxdevs/workshop-ecommerce-app/blob/main/backend/src/main/java/com/datastax/tutorials/service/user/

因此,我建议查看widgetData对象的类,确保它使用了@UserDefinedType注释,并在Dashboard类中使用@Column注释标记列(基本上是去掉@CassandraType):

@Column("dashboardState")
private List<WidgetData> dashboardState;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接