在带有 Spring Data Java 的 mongodb 中使用抽象类作为字段

问题描述 投票:0回答:1

我正在尝试使用抽象类作为 MongoDB 文档的字段,使用 Spring Data。这是一个例子(我使用 lombok 作为 getter/setter):

@Data
@Document
public class User {
   private String id;
   private String name;
   private List<Vehicle> vehicles;
}

@Data
public abstract class Vehicle {
   private String type; 
}

@Data
public class Car extends Vehicle {
   private int seats;
   private String fuel;
}

@Data
public class Motorcycle extends Vehicle {
   private int cc;
}

很明显,这段代码不起作用,因为当我从数据库中读取数据时,它无法实例化 Vehicle 类。现在我的问题是:如何根据抽象类的类型字段自动实例化正确的子类?

提前致谢。

编辑:

我试过用下面的方法解决,但是好像不行:

@Data
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value = Car.class, name = "CAR"),
        @JsonSubTypes.Type(value = Motorcycle.class, name = "MOTORCYCLE")
})
public abstract class Vehicle {
   private String type; 
}
java mongodb spring-boot spring-data-jpa abstract-class
1个回答
0
投票

检查以下任何一项是否有效:

  1. 移除 JsonSubTypes 和 JsonTypeInfo 注释

  2. 检查您从“Vehicle”继承的类是否不包含 @TypeAlias(“Car/Moto”) 注释 - 此处给出的值将覆盖默认 MongoTemplate 配置中的“_class”字段。

  3. 从 MongoDb 数据库下载有问题的记录,并确保“_class”字段包含汽车/摩托车类的正确(完整)类路径。

  4. 可以试试@Document注解中的集合名称

  5. 更新与 Mongo 相关的驱动程序和库。

© www.soinside.com 2019 - 2024. All rights reserved.