야미의 개발

[Spring/SpringBoot] MySql SQL Error: 1064, SQLState: 42000 에러 해결하기 본문

스프링/웹 개발

[Spring/SpringBoot] MySql SQL Error: 1064, SQLState: 42000 에러 해결하기

채야미 2024. 6. 9. 13:58

SQL Error: 1064, SQLState: 42000
에러가 나는 원인은 다양하지만 MySql 예약어를 사용해서 오류가 난 경우가 아닌 다른 경우입니다.


 

2024-06-09T12:36:16.529+09:00  WARN 5671 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 1064, SQLState: 42000
2024-06-09T12:36:16.529+09:00 ERROR 5671 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '0)' at line 1
2024-06-09T12:36:16.530+09:00  INFO 5671 --- [nio-8080-exec-1] p6spy                                    : #1717904176530 | took 0ms | rollback | connection 1| 

오류를 보면 syntax 에러가 났고 0) 이 부분에서 오류가 낫다고하네요


select r1_0.book_id, r1_0.id, r1_0.content, r1_0.created_at, r1_0.deleted_at, r1_0.is_deleted, r1_0.score, r1_0.updated_at, r1_0.user_id 
from review r1_0 
where r1_0.book_id=? and (r1_0.is_deleted is 0)

 

 

이 부분에서 오류가 난 것입니다.

 

 

원인

하이버네이트는 boolean 타입으로 table을 만들때 tinyint값으로 칼럼을 만듭니다.

따라서 

public boolean isDeleted() {
    return this.isDeleted;
}

이런식으로 작성된 엔티티는 ddl auto  = create를 사용했을때

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| is_deleted    | tinyint(1)   | NO   |     | 0       |                |

 

이렇게 칼럼이 만들어진 것을 확인할 수 있습니다.

 

 

이때

한편 오류가 난 sql 쿼리문을 보면

조건문에서 r1_0.is_deleted is 0 를 사용하고 있습니다.

mySql은 null이나 true, false 와 같은 부울 값을 비교할때만 is를 사용하고 

0,1과 같은 값을 비교할 때는 = 연산자를 사용해주어야합니다.

 

 

 

해결

@SQLRestriction("is_deleted is false")
@NoArgsConstructor
public class ReviewEntity extends BaseEntity {

 

softDelete를 구현하는 코드중에 is를 사용하는 부분이 있어

 

@SQLRestriction("is_deleted = false")
@NoArgsConstructor
public class ReviewEntity extends BaseEntity {

 

아래와 같이 변경해주었습니다.

Comments