@Column(unique = true)
private String username;
private String password;
private String name;
@Column(unique = true)
private String nickName;
@Column(unique = true)
private String email;
@Builder.Default
private String role = "user";
private String providerTypeCode;
//MemberService
Member member = Member
.builder()
.providerTypeCode(providerTypeCode)
.username(username)
.password(password)
.name(name)
.nickName(nickName)
.email(email)
.build();
- 에러내용
There was an unexpected error (type=Internal Server Error, status=500).
could not execute statement; SQL [n/a]; constraint [member.UK_mbmcqelty0fbrvxp1q58dn57t]
org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [member.UK_mbmcqelty0fbrvxp1q58dn57t]
이런 에러가 발생했다.
GPT에게 문의 한 답변
해당 에러는 내부 서버 오류(Internal Server Error)로, 데이터 무결성(Data Integrity) 제약조건 위반으로 인해 SQL 문장을 실행할 수 없음을 나타냅니다. 보다 구체적으로는 "member.UK_mbmcqelty0fbrvxp1q58dn57t" 제약조건이 위반되었음을 알려줍니다.
이 에러는 주로 데이터베이스 시스템에서 발생하는데, 일반적으로 테이블에 대해 고유한(unique) 제약조건이 설정되어 있는 경우, 그 제약조건을 위반하는 데이터를 삽입하려고 할 때 발생할 수 있습니다.
그래서 혹시 뭐가 문제인지 하나씩 빼고 실행을 해보니 nickName
, email
에서 문제가 발생했다. 아마 원인이 @Column(unique = true)
를 설정해줘서 join()
에 ""
값을 넣어서 저장해서 원인이 발생한듯 했다.
nickName
, email
에 @Column(unique = true)
값을 제거 해주면 정상 작동하였다.nickName
, email
값이 유니크해야 하므로 이방법은 패스 하게 되었다.join()
메소드에 ""
값을 넣어주는 것이 아닌 null
을 넣어주는 방법으로 해결하였다.이러한 에러가 발생한 이유가 뭘까 ?
email
, nickName
의 값을 unique
로 설정해주었지만 소셜로그인을 하게 되면 전부다 ""
로 저장되기 때문에 같은 값을 저장해서 원인이 발생했다.이렇게 해결하는게 최선의 방법일까 ?