programing

Spring Boot R2DBC가 Maria에 문자 필드를 저장하지 못함DB

kingscode 2022. 10. 9. 11:35
반응형

Spring Boot R2DBC가 Maria에 문자 필드를 저장하지 못함DB

Spring Reactive + MariaDB를 사용하여 REST API를 구축하고 있습니다.
사용자 개체를 저장하려고 합니다.이런 특성을 가지고 있습니다.emailAddress(String), fullName(String), password(String) 데이터베이스의 동등한 열: emailAddress(varchar), fullName(varchar), password(varchar)

위의 필드에서는 정상적으로 동작합니다만, 새로운 타입의 필드를 추가했을 경우).private char status) 및 데이터베이스의 테이블 내의 동등한 컬럼(status char(1)에러가 발생하고, 다음의 에러가 발생합니다.

2021-02-14 | 18:37:51.904 | reactor-tcp-nio-2    | ERROR | o.s.b.a.w.r.e.AbstractErrorWebExceptionHandler | [0aef325c-1]  500 Server Error for HTTP POST "/users"
java.lang.IllegalArgumentException: No encoder for class java.lang.Character (parameter at index 3) 
    at org.mariadb.r2dbc.MariadbClientParameterizedQueryStatement.bind(MariadbClientParameterizedQueryStatement.java:93)
    Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
    |_ checkpoint ⇢ Handler com.timesheet.timesheetapi.controller.UserController#post(User) [DispatcherHandler]
    |_ checkpoint ⇢ HTTP POST "/users" [ExceptionHandlingWebHandler]
Stack trace:
        at org.mariadb.r2dbc.MariadbClientParameterizedQueryStatement.bind(MariadbClientParameterizedQueryStatement.java:93)
        at org.mariadb.r2dbc.MariadbClientParameterizedQueryStatement.bind(MariadbClientParameterizedQueryStatement.java:34)
...

이게 제 수업입니다.

public class User {

    @Id
    private long id;

    private String email;
    @Column("fullName")
    private String fullName;
    private String password;
    private char status;
    @Column("crDate")
    private LocalDateTime crDate;
    @Column("updDate")
    private LocalDateTime updDate;
}

crDate/updDate 필드를 지정할 수 있습니다.
이것이 MariaDB에 있는 제 테이블의 정의입니다.

CREATE TABLE `tuser` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `email` VARCHAR(100) NULL DEFAULT NULL,
    `fullName` VARCHAR(100) NULL DEFAULT NULL,
    `status` CHAR(1) NOT NULL DEFAULT 'D' COMMENT 'A=Active,D=Disabled',
    `password` VARCHAR(100) NULL DEFAULT NULL,
    `crDate` DATETIME NULL DEFAULT current_timestamp(),
    `updDate` DATETIME NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=16;

이것은 제 POM의 관련 부분입니다(만약 도움이 된다면).

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mariadb</groupId>
            <artifactId>r2dbc-mariadb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
        </dependency>

제가 뭔가 기본적인 걸 놓치고 있는 게 분명한데 뭐가 뭔지 모르겠어요.좋은 생각 있어요?

당신의 DB API는 캐릭터 타입으로 동작할 수 없는 것 같습니다만, tell 메시지입니다.No encoder for class java.lang.Character상태 필드의 유형을 char에서 String으로 변경해 보셨습니까?캐릭터는 특정 유형입니다.놀라울 수도 있습니다.

언급URL : https://stackoverflow.com/questions/66198909/spring-boot-r2dbc-fails-to-store-character-field-in-mariadb

반응형