import后,如何二次处理数据;
例如:根据自己的规则,专门设置entity的某个字段值
导入配置中的初始化器( Entity initializer)或者自定义映射都可以为实体属性提供自定义值。
不确定你的问题点在哪里。
能再详细描述一下需求吗?
在使用dataimport时,分两步:
- 设定配置
- 拿到导入的inputStream
然后调用dataimporter类的方法直接传两个参数导入了,但是我想在次之前,处理一下导入的数据。比如导入的数据对应的entity的字段a我想改成‘当前时间+A’
我理解的要给实体属性设置初始值。如果是这样,使用实体初始化器就行了。文档示例里没有提到。但是源码里有。
参考:
可能需要做一下逻辑校验,code不能重复,我先试试这个方法。
看了一下,没找到方法。还需要指导下
你好,
描述一下具体的场景,要做什么?目前怎么做的?遇到的问题是什么?
场景:我要做一个导入导出功能,导出已有的数据,编辑后导入且自动生成编码。
例子:
(1)系统中有一批中文语种的区域信息,现在需要加一批英文语种的区域信息,导出所有区域信息,编辑后导入
(2)系统中区域信息已有五种语言,我要加一个冰岛区域。先任意导出一个区域如‘北京’,编辑五种语言后导入。需要后台根据规则自动生成code,如果A201等;且需要校验name=‘冰岛’在系统中不存在
因此,我需要在导入的文件流转换成entity,但未写库时,做一些逻辑操作。
你好,
可以使用实体初始器,这个初始器会应用在每个实体上,可以在初始器中生成code,然后给赋值给指定属性。
根据你的描述,应该是一个前置校验,可以在调用 dataImport 的 API 前写代码进行检验。不需要通过 dataImport 提供接口来检验。
如果上述方法确实不能满足需求,可以扩展DataImportExecutor 组件,重写它的 importEntities()
方法,在这个方法里可以获取到待导入的所有体,然后进行任意逻辑处理。
protected List<Object> importEntities(List<Object> entitiesToImport) {
applyEntityInitializer(entitiesToImport);
List<Object> resultList = new ArrayList<>();
entitiesToImport.forEach(entityToImport -> {
EntityImportPlan entityImportPlan = createEntityImportPlan(entityToImport);
Collection<Object> importedEntities = entityImportExport.importEntities(Collections.singletonList(entityToImport), entityImportPlan, true);
Collection<Object> filteredImportedEntities = importedEntities.stream()
.filter(importedEntity -> (importedEntity.getClass().isAssignableFrom(importConfiguration.getEntityClass())))
.collect(Collectors.toList());
resultList.add(filteredImportedEntities.iterator().next());
});
return resultList.stream()
.map(EntityValues::getId)
.collect(Collectors.toList());
}
因为我拿到的是文件流,直接给了dataImporter.importData(importConfiguration, inputStream)
所以前置校验,我应该要将自带的importData分成两个,要写:
(1)拿到转换数据的方法
(2)由转换数据在导入的方法
这样基本重写那个类了?好像不止一个类
我尝试了通过setEntityInitializer
能够设置entity的字段:
Consumer<Object> consumer1 = new Consumer<Object>() {
@Override
public void accept(Object o) {
if (o instanceof Area){
((Area) o).setFdIos2("ssss");
}
}
};
importConfiguration.setEntityInitializer(consumer1);
重写了这五个类,加了获取后的转换数据
和保存转换后的数据
两个新的方法