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
'programing' 카테고리의 다른 글
|와 | 또는 연산자의 차이점은 무엇입니까? (0) | 2022.10.09 |
---|---|
SVG 콘텐츠 삭제 또는 치환 방법 (0) | 2022.10.09 |
URL에서 서버로 파일 다운로드 (0) | 2022.10.09 |
공간 색인이란 무엇이며 언제 사용해야 합니까? (0) | 2022.10.09 |
람다 식 및 일반이 메서드에만 정의됨 (0) | 2022.10.09 |