首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bean类Bean属性'ID‘的Spring批DB到CSV无效属性'ID’不可读或具有无效的getter方法

bean类Bean属性'ID‘的Spring批DB到CSV无效属性'ID’不可读或具有无效的getter方法
EN

Stack Overflow用户
提问于 2022-10-06 10:26:38
回答 1查看 65关注 0票数 0

我试图实现一个Spring批处理示例。当我发送请求时,通常会将数据库中的所有值加载到csv文件中,但我得到了如下所示的错误。

代码语言:javascript
运行
复制
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中存在问题,我手动插入了所有值。

下面是用户类

代码语言:javascript
运行
复制
@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;
}

这是性别的终结吗?

代码语言:javascript
运行
复制
public enum Gender {
    MALE,
    FEMALE
}

这是BaseEntity类吗?

代码语言:javascript
运行
复制
@MappedSuperclass
@Getter
public class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

下面是创建数据库的脚本。

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
    }
}

我怎样才能解决这个问题?

下面是示例链接:链接

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-06 12:45:44

这是下面的答案。

在我将列名改为小写后,这个问题就消失了。

代码语言:javascript
运行
复制
@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;
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73972298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档