티스토리 뷰

반응형

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로 테이블을 새로 생성해버린 상황

 

1) postgresql table

그래서 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을 처음 쓰다보니 알지 못했던 상황이다.

반응형
댓글
반응형
최근에 올라온 글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Total
Today
Yesterday