我试图实现一个Spring批处理示例。当我发送请求时,通常会将数据库中的所有值加载到csv文件中,但我得到了如下所示的错误。
org.springframework.beans.NotReadablePropertyException: Invalid property 'ID' of bean class [com.example.springbatchprocessdbtocsv.model.User]: Bean property 'ID' is not readable or has an invalid getter method: Does the return type of the getter match the parameter type of the setter?
由于data.sql中存在问题,我手动插入了所有值。
下面是用户类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "USERS")
@Builder
public class User extends BaseEntity{
@Type(type = "org.hibernate.type.UUIDCharType")
private UUID personId;
private String firstName;
private String lastName;
private String email;
@Enumerated(EnumType.STRING)
private Gender gender;
private String country;
@JsonFormat(pattern="yyyy-MM-dd")
private LocalDate birthday;
private int age;
}
这是性别的终结吗?
public enum Gender {
MALE,
FEMALE
}
这是BaseEntity类吗?
@MappedSuperclass
@Getter
public class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
下面是创建数据库的脚本。
CREATE TABLE USERS (
"ID" BIGINT auto_increment NOT NULL PRIMARY KEY,
"AGE" INTEGER NOT NULL,
"BIRTHDAY" DATE,
"COUNTRY" CHARACTER VARYING(255),
"EMAIL" CHARACTER VARYING(255),
"FIRST_NAME" CHARACTER VARYING(255),
"GENDER" CHARACTER VARYING(255),
"LAST_NAME" CHARACTER VARYING(255),
"PERSON_ID" CHARACTER VARYING(255)
);
下面是如下所示的UserProcessor
public class UserProcessor implements ItemProcessor<User, User> {
@Override
public User process(User user) throws Exception {
//return user;
// I also tried it but nothing changed.
User user = User.builder()
.personId(from.getPersonId())
.firstName(from.getFirstName())
.lastName(from.getLastName())
.email(from.getEmail())
.country(from.getCountry())
.birthday(from.getBirthday())
.gender(from.getGender().equals("Male") ? Gender.MALE : Gender.FEMALE)
.age(from.getAge())
.build();
return user;
}
}
我怎样才能解决这个问题?
下面是示例链接:链接
发布于 2022-10-06 12:45:44
这是下面的答案。
在我将列名改为小写后,这个问题就消失了。
@Bean
public FlatFileItemWriter<User> writer() {
FlatFileItemWriter<User> writer = new FlatFileItemWriter<>();
writer.setResource(outputResource);
writer.setAppendAllowed(true);
writer.setLineAggregator(new DelimitedLineAggregator<User>() {
{
setDelimiter(",");
setFieldExtractor(new BeanWrapperFieldExtractor<User>() {
{
setNames(new String[]{"id", "age", "birthday", "country", "email", "firstName", "gender", "lastName", "personId"});
}
});
}
});
return writer;
}
https://stackoverflow.com/questions/73972298
复制相似问题