Spring数据@Transient抽象类

时间:2018-12-12 13:39:47

标签: java spring-data spring-data-mongodb

我有一个名为“ 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类的 state 字段,就像在继承中@Transient注释被忽略一样。

1 个答案:

答案 0 :(得分:1)

您的代码对我来说很好。

您确定使用正确的@Transient批注吗? 必须从软件包 org.springframework.data.annotation 导入。 不要使用javax持久性。

此外,请确保使用 MappingMongoConverter 。仅当您将MappingMongoConverter用作MongoTemplate的后备转换器时,基于注释的映射才有效。如果您未配置转换器,则默认情况下将使用SimpleMongoConverter,该对象仅将对象序列化到Mongo中,而无需查看任何元信息。