java - 抽象类中的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注释被忽略了。
解决方案
你的代码对我来说看起来不错。
您确定您使用的是正确的 @Transient 注释吗?它必须从包org.springframework.data.annotation导入。不要使用 javax 持久性之一。
此外,一定要使用MappingMongoConverter。仅当您使用 MappingMongoConverter 作为 MongoTemplate 的支持转换器时,基于注释的映射才有效。如果您没有配置转换器,默认情况下将使用 SimpleMongoConverter,它只是将对象序列化到 Mongo 中,而无需查看任何元信息。
推荐阅读
- vba - 用于在 PowerPoint 幻灯片放映中禁用 ESC 键的宏
- qt - 使用 Loader 加载 ListView 元素时填充顺序错误
- java - Log4j2:模式布局中的 XML 日志文件更改以捕获毫秒 - sss
- opencv - 使用 OpenCV 从已知坐标的点中查找相机的位置
- python - 使用清除按钮清除破折号中下拉菜单的值时出错
- heroku - 缺少脚本“开始”
- sql-server - 尝试将 sql server 连接到 Web 应用程序核心时出错
- javascript - 围绕从 URL 表单提交的图像动态添加 div
- javascript - Cannot set permissions on newly created channel
- sql - TSQL - 拆分 GUID/UNIQUEIDENTIFIER