首页 > 解决方案 > 抽象类中的Spring数据@Transient

问题描述

我有一个策略模式,用一个叫做presentation的抽象类实现

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")

@JsonSubTypes({
@Type( value=PiePresentation.class, name="PIE"),
@Type( value=BarPresentation.class, name="BAR")})

public abstract class Presentation {

    String id;
    List<? extends DetailResponse> data =  new ArrayList();
    String[] variables;
    Map<String, Object> configurations;        

    @Transient
    protected ExecutionState state;
}

还有两个子类,这是其中之一

public class PiePresentation extends Presentation{

    @Transient
    private List<Segment> response;

}

这些类是存储在 mongo 集合中的另一个类的字段。问题是spring数据存储了Presentation类的状态字段,就像在继承中@Transient注释被忽略了。

标签: javaspring-dataspring-data-mongodb

解决方案


你的代码对我来说看起来不错。

您确定您使用的是正确的 @Transient 注释吗?它必须从包org.springframework.data.annotation导入。不要使用 javax 持久性之一。

此外,一定要使用MappingMongoConverter。仅当您使用 MappingMongoConverter 作为 MongoTemplate 的支持转换器时,基于注释的映射才有效。如果您没有配置转换器,默认情况下将使用 SimpleMongoConverter,它只是将对象序列化到 Mongo 中,而无需查看任何元信息。


推荐阅读