programing

스키마 유효성 검사: 테이블 [게임] 누락

starjava 2023. 8. 10. 18:10
반응형

스키마 유효성 검사: 테이블 [게임] 누락

저는 이것이 중복될 수도 있다고 생각합니다.스키마 유효성 검사: 테이블 [hibernate_sequences]이(가) 누락되었지만 알 수 없습니다.

그래서 내 안에서application.properties파일 다음 옵션이 있습니다.spring.jpa.hibernate.ddl-auto=validate다음 오류가 표시됩니다.

Schema-validation: missing table [game]

이 메시지가 표시되는 이유는 무엇입니까?

여기 내꺼Game클래스와User클래스:

게임:

@Entity
public class Game {
    @Id
    @Column(name = "GAME_NUMBER")
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long gameNumber;

    private int playerScore;
    private int NPCScore;
    private Date datetime;

    @ManyToOne
    @JoinColumn(name="USER_ID")
    private User user;

    public Game() {}

    public Game(int playerScore, int nPCScore, Date datetime) {
        super();
        this.playerScore = playerScore;
        this.NPCScore = nPCScore;
        this.datetime = datetime;
    }

    public User getUser() {
        return user;
    }
} + getters & setters

사용자:

@Entity
public class User {
    @Id
    @Column(name = "USER_ID")
    @GeneratedValue(strategy = GenerationType.SEQUENCE)
    private long userId;

    private String username;
    private String password;

    @OneToMany(mappedBy="user",cascade=CascadeType.ALL)
    private List<Game> games;

    @ElementCollection
    private List<Date> startSessions;

    public User() {}

    public User(String username, String password, List<Game> games, List<Date> startSessions) {
        super();
        this.username = username;
        this.password = password;
        this.games = games;
        this.startSessions = startSessions;
    }
}

validate엔티티가 대상에 대해 완벽하게 호환되는지 확인합니다.어쨌든, 유효성을 검사하려는 데이터베이스에는 다음 테이블이 없습니다.game엔티티를 저장할 수 있습니다.

이 대답은 무엇에 대해 더 자세히 설명합니다.validate한다.

최대 절전 모드 - 최대 절전 모드.hbm2dl.auto = 유효성 검사

구체적으로,

테이블, 열, ID 생성기의 존재를 확인합니다.

데이터베이스/기대 사항을 모르면(데이터베이스가 만들어질 것으로 예상하십니까, Flyway/Lequibase를 사용하여 데이터베이스를 작성/업데이트하는 등)그렇다면 대답할 수 없습니다.validate사용 사례에 적합합니다.

시도해 볼 수 있습니다.create-drop시작/시작 시 테이블을 만들고 삭제하지만 데이터베이스에 대한 프로덕션 제어를 위한 솔루션은 아닙니다.

Hibernate 5.4.0으로 변경했을 때와 동일한 결과를 얻었습니다.Final. Hibernate가 갑자기 기본 스키마를 인식하지 못하거나 드라이버가 스키마를 제대로 반환하지 않습니다.테이블 정의에 스키마 정의를 추가하여 우회할 수 있었습니다.

@Table(name = "GAME", schema = "PUBLIC") 

또는 persistence.xml에 기본 스키마를 추가합니다.

<property name="hibernate.default_schema" value="PUBLIC" />

사용 권한: GRANT 선택, 삽입, 업데이트, 삭제, ON table_name To usr_name 변경;

이 오류는 플라이웨이 DB와 함께 스프링 부트를 사용하는 동안 발생할 수 있습니다.이 문제는 플라이웨이에서 사용된 스크립트 파일의 잘못된 명명 규칙 때문일 수 있습니다.DB.

https://flywaydb.org/documentation/migrations#naming

SQL 표준에서는 이름을 대문자로 저장해야 합니다.테이블/필드의 이름을 소문자로 지정한 경우 - JPA는 대소문자를 대문자로 자동 변환하고 이 경우 이름을 검색하려고 하지만 소문자로 로그에 기록합니다.¯\_(ツ)_/¯

application.yml에 추가합니다.

spring:
  jpa:
    properties:
      hibernate:
        default_schema: game

최대 절전 모드 버전 5.6.9, 대/소문자 구분 구현:

hibernate:
        physical_naming_strategy: 'org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl'

2023년에 이곳에 오신 분들을 위해 다음과 같은 내용을 추가하여 문제를 해결했습니다.spring.jpa.properties.hibernate.default_schema = dbName

내 application.properties는 다음과 같습니다.

spring.datasource.url=jdbc:postgresql://localhost:5432/dbName
spring.datasource.username=//your username
spring.datasource.password=//your password

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto= validate
spring.jpa.properties.hibernate.jdbc.time_zone = UTC
spring.jpa.properties.hibernate.default_schema = dbName

#flyway configuration
spring.flyway.user = //your username
spring.flyway.password = //your password
spring.flyway.defaultSchema = dbName

#SHOW-SQL
spring.jpa.properties.hibernate.show_sql = true

언급URL : https://stackoverflow.com/questions/44479406/schema-validation-missing-table-game

반응형