티스토리 뷰
반응형
Entity 클래스에 @Table 어노테이션 name을 대문자로 지정했는데
JPA에서는 소문자로 받는 상황
그래서 해당 테이블이 존재하지 않는다고 에러 발생 중인 상황 ;;
(ddl-auto : validate 로 했을시)
@Entity
@Table(name="TB_USER", schema = "public" )
@NoArgsConstructor
@Getter
public class User {
@Column(name="user_name")
private String userName;
@Id
@Column(name="user_email")
private String userEmail;
@Column(name="user_age")
private int userAge;
}
Entity 클래스는 다음과 같고 insert 테스트 돌리고 쿼리문을 보면
insert into public.tb_user (user_age, user_name, user_email) values (?, ?, ?)
DB TABLE 명을 TB_USER 로 생성해놨는데 JPA가 tb_user로 테이블을 새로 생성해버린 상황
그래서 jpa naming 규칙을 물리적으로 변경함
#application.yml
jpa:
hibernate:
ddl-auto: none
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
database: postgresql
database-platform: org.hibernate.dialect.PostgreSQLDialect
show-sql: true
generate-ddl: true
jpa.hibernate.naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
프로퍼티를 위와 같이 추가하고 실행했더니
로그에는
insert into public.TB_USER (user_age, user_name, user_email) values (?, ?, ?)
됐다! ..... 싶었으나
값은 tb_user 테이블에 insert 되었음...
그래서 JPA 문제인가 여러가지로 테스트를 해보았으나 뭔가 이상함을 인지...
아무리 대문자로 쿼리 날려도 postgresql은 소문자로 받는것을 확인...
찾아보니 postgresql 은 소문자로 받고 대문자는 따옴표로 잡아줘야 대문자로 인식했다... 아...
Entity 클래스 name에 따옴표를 추가해줬다.
@Table(name="\"TB_USER\"", schema = "public" )
insert into public."TB_USER" (user_age, user_name, user_email) values (?, ?, ?)
이제서야 원하던 TABLE 에 값이 삽입되었다.
postgresql을 처음 쓰다보니 알지 못했던 상황이다.
반응형
'Java > JPA, QueryDSL' 카테고리의 다른 글
[QueryDSL] Q클래스, cannot find symbol error (feat.intelliJ) (0) | 2023.05.15 |
---|---|
[JPA] 복합키 연관관계 맵핑하기 (feat.@Embeddable) (0) | 2023.02.23 |
[QueryDSL] Q클래스 빌드오류 해결 (feat.intelliJ) (0) | 2023.02.16 |
[QueryDSL] Q클래스 생성하기 : annotationProcessor 방식 (feat.intelliJ) (0) | 2023.02.02 |
[QueryDSL] Q클래스 생성하기 : 플러그인 방식(feat.STS/eclipse) (0) | 2022.12.29 |
댓글