2017-12-17 10 views
3

pgAdmin을 통해 "TEST"테이블이 공용 구성표 안에 있음을 분명히 알 수 있습니다.테이블을 찾을 수 없습니다 - 잘못된 이름 지정 전략이 있습니까?

@Entity 
@Table(name = "TEST", schema = "public") 
public class TestEntity 

application.yml :

spring: 
    jpa: 
    hibernate: 
     ddl-auto: validate 
     naming: 
     physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl 
    databasePlatform: org.hibernate.dialect.PostgreSQLDialect 

예외 :

나는 '갱신'에 DDL-자동 변경
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [TEST] 
     at org.hibernate.tool.schema.internal.SchemaValidatorImpl.validateTable(SchemaValidatorImpl.java:67) 

가 함께 테이블을 생성 여기

내 구성입니다 "테스트"이름과 모든 것이 예상대로 작동하기 시작합니다. 문제는 내 구성이 문제가 아니라 "TEST"를 찾아야한다는 것입니다. 누군가 도움을 줄 수 있습니까? 더 구체적인 방언을 사용해야 할 필요가 있을까요?

+0

application.properties를 사용하려고 할 수 있습니다 테스트합니다. – garfield

답변

0

hibernate 버전을 모르는 경우 hibernate 기능을 예로들 수 있습니다 (예 : here). 이 경우

용액 here을 제안

@Table(name = "test", schema = "public") 

에 하부 케이스

@Table(name = "TEST", schema = "public") 

표 이름을 변경하는 것이다.

데이터베이스에 따라 이스케이프 된 큰 따옴표로 묶어 대문자로 테이블을 만들 수도 있습니다.

@Table(name = "\"TEST\"", schema = "public") 

후자는 적어도 Postgres와 호환됩니다.

1

이유는 물론 명명 전략입니다. 단지 PhysicalNamingStrategy가 변경할 수 있습니다 여기 @Table(name = "TEST")처럼

  1. 명시 적으로 테이블 이름을 지정

    (반대 ImplicitNamingStrategy).
  2. SpringPhysicalNamingStrategy은 소스에서 알 수 있듯이 이름을 소문자로 변경합니다. SpringPhysicalNamingStrategy.java. 거기에서 코드 :

    protected Identifier getIdentifier(String name, boolean quoted, JdbcEnvironment jdbcEnvironment) { if (isCaseInsensitive(jdbcEnvironment)) { name = name.toLowerCase(Locale.ROOT); } return new Identifier(name, quoted); }

  3. org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl는 아무것도 실시하지 않습니다. 따라서 테이블 이름은 지정한대로 TEST이어야합니다. 하지만 spring-boot 구성에서 잘못 지정했습니다. 속성 이름을 두 번 확인해야합니다.

  4. 해당 속성 값에 대해 다른 속성 파일 (다른 jar 파일이있을 수 있음)을 확인할 수도 있습니다. 또한

, 그냥 당신이 당신의 스키마를 확인하는 경우, 이러한 오류가 응용 프로그램의 YAML의 데이터 소스 정의에 관련된 내 경험에서

spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl