J'utilise le printemps et le printemps données jpa dans mon application première fois. Le lot printanier lit un fichier texte: aCode, aName, sCode. J'ai un POJO qui associe ces touches comme ci-dessous, une des clés est d'un autre type d'objetlot de printemps - FlatFileItemReader - jeton est de type objet
public class Pojo{
private AnotherObject sCode;
private String aName;
private String aCode;
}
Ci-dessous mon lecteur en classe BatchConfiguration. Comment gérer ce AnotherObject. je reçois une erreur disant:
Causée par: org.springframework.beans.NotWritablePropertyException: propriété non valide « sCode » de la classe de haricots [Pojo]: correspondance en double avec la distance < = 5 trouvée pour cette propriété dans les clés d'entrée: [ "sCode", "aCode", "aName"]. (Envisagez de réduire la limite de distance ou de modifier les noms des touches de saisie pour obtenir une correspondance plus précise.)
@Bean
@StepScope
public FlatFileItemReader<Area> reader(
@Value("#{stepExecutionContext[fromId]}") final String fromId,
@Value("#{stepExecutionContext[toId]}") final String toId,
@Value("#{stepExecutionContext[name]}") final String name) {
FlatFileItemReader<Area> reader = new FlatFileItemReader<>();
try{
reader.setResource(new ClassPathResource("area_temp.txt"));
LineMapper<Area> areaMapper = createAreaLineMapper();
reader.setLineMapper(areaMapper);
}
catch(Exception e){
e.printStackTrace();
}
return reader;
}
private LineMapper<Area> createAreaLineMapper() {
DefaultLineMapper<Area> areaLineMapper = new DefaultLineMapper<>();
LineTokenizer areaTokenizer = createAreaTokenizer();
areaLineMapper.setLineTokenizer(areaTokenizer);
FieldSetMapper<Area> areaInformationMapper = createAreaInformationMapper();
areaLineMapper.setFieldSetMapper(areaInformationMapper);
return areaLineMapper;
}
private LineTokenizer createAreaTokenizer() {
DelimitedLineTokenizer areaLineTokenizer = new DelimitedLineTokenizer();
areaLineTokenizer.setDelimiter("|");
areaLineTokenizer.setNames(new String[]{"sCode","aCode","aName"});
return areaLineTokenizer;
}
private FieldSetMapper<Area> createAreaInformationMapper() {
BeanWrapperFieldSetMapper<Area> areaMapper = new BeanWrapperFieldSetMapper<>();
areaMapper.setTargetType(Area.class);
return areaMapper;
}
Merci de votre participation. Pourquoi devrions-nous remplacer le distancelimit, lorsque les noms dans pojo et {"sCode", "aCode", "aName"} correspondent. Si la distancelimit est> 5 ou moins de 5 – user700
après que je l'ai défini à areaMapper.setDistanceLimit (0); Ce problème a disparu mais une autre erreur est survenue: «Provoqué par: org.springframework.beans.NotWritablePropertyException: La propriété 'ePCode' de la classe bean [Pojo] est incorrecte. La propriété Bean 'ePCode' n'est pas accessible en écriture ou possède une méthode setter non valide. Le type de paramètre du setter correspond-il au type de retour du getter? " Je suis sûr, l'AnotherObject a getter public et setter publique pour ePCode – user700