@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Qna extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private Account account;
private String title;
private String content;
}
spring:
jpa:
hibernate:
ddl-auto: create
위와 같이 Qna Entity를 생성하고 jpa.hibernate.ddl-auto: create로 설정해 MySQL에 Qna 테이블을 자동으로 생성하였다.
Qna를 등록하는 과정에서 content를 500자 정도로 설정하고 qnaRepository.save(qna)를 호출하였을 때, 다음과 같은 오류가 발생하였다.
com.mysql.cj.jdbc.exceptions.MysqlDataTruncation:
Data truncation: Data too long for column '' at row 1
원인
해당 오류는 자동으로 테이블을 생성하고 String 타입의 필드에 @Cloumn의 length 옵션을 지정하지 않으면 default 값인 255로 설정되기 때문에, MySQL 테이블에서 해당 필드는 varchar(255)로 설정된다.
이로 인해, content가 255자가 넘어 "Data too long for column" 오류가 발생한 것이다.
해결
@Getter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Qna extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private Account account;
private String title;
@Column(length = 1000)
private String content;
}
@Cloumn의 length 옵션으로 varchar 길이를 설정하여 테이블 자동 생성 시 varchar({설정 값})으로 타입이 지정되게 할 수 있다.
'트러블 슈팅' 카테고리의 다른 글
[Spring] Spring Security + Junit5 (0) | 2022.11.15 |
---|---|
[JPA] UnexpectedRollbackException (0) | 2022.11.04 |
[Jmeter] HttpMediaTypeNotSupportedException: Content type 'text/plain;charset=UTF-8' not supported (0) | 2022.10.22 |
[JPA] 설정한 batch_size만큼 in 절이 나가지 않는 이유 (0) | 2022.10.02 |
[Error] WebClient MacOS 에러 (0) | 2022.09.30 |