강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

bull0023님의 프로필 이미지
bull0023

작성한 질문수

스프링부트 JPA 관련 질문

작성

·

592

0

Caused by: jakarta.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: missing table [board_seq]

 

최근 백엔드 쪽 관심 생겨서 공부하고 있는 학생입니다. 게시판 만들려고 워크벤치에 테이블 만들어 놓고 스프링에서 연동시킬려 하니까 위와 같은 에러가 나타납니다. board테이블은 이미 작성해 놓았는데 왜 저런 에러가 발생할까요

 

 

<board.db>

package com.example.jpadata.board.db;

import org.springframework.data.jpa.repository.JpaRepository;

public interface BoardRepository extends JpaRepository<BoardEntity, Long> {
}
package com.example.jpadata.board.db;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
@Entity(name = "board")
public class BoardEntity {
    @Id
    @GeneratedValue
    private Long id;
    private String boardName;
    private String status;
}

<post.db>

package com.example.jpadata.post.db;

import org.springframework.data.jpa.repository.JpaRepository;

public interface PostRepository extends JpaRepository<PostEntity,Long> {
}
package com.example.jpadata.post.db;

import jakarta.persistence.*;
import lombok.*;

import java.awt.*;
import java.time.LocalDateTime;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
@Entity(name = "post")

public class PostEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long boardId;
    private String UserName;
    private String password;
    private String email;
    private String status;
    private String title;
    @Column(columnDefinition = "TEXT")
    private String content;
    private LocalDateTime postedAt;
}

<reply.db>

package com.example.jpadata.reply.db;

import org.springframework.data.jpa.repository.JpaRepository;

public interface ReplyRepository extends JpaRepository<ReplyEntity, Long> {
}
package com.example.jpadata.reply.db;

import jakarta.persistence.*;
import lombok.*;

import java.time.LocalDateTime;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ToString
@Entity(name = "reply")

public class ReplyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long postId;
    private String userName;
    private String password;
    private String status;
    private String title;
    @Column(columnDefinition = "TEXT")
    private String content;
    private LocalDateTime repliedAt;
}
 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

JPA를 사용할 때 테이블 생성이나 관리와 관련된 에러는 주로 application.properties 또는 application.yml 파일의 JPA 관련 설정에 문제가 있을 때 발생합니다. 스프링 부트에서는 Hibernate를 사용하여 자동으로 DDL(Data Definition Language)을 생성하는 기능을 제공하는데, 이것이 올바르게 설정되지 않았을 수도 있습니다.

요구하신 에러 메시지 “Schema-validation: missing table [board_seq]“는 board_seq라는 이름의 테이블이나 시퀀스(sequence)가 데이터베이스 내에 존재하지 않는다는 것을 나타냅니다. 이는 보통 @GeneratedValue 어노테이션이 적용된 엔티티 필드에서 기본 키 생성 전략이 시퀀스(sequence)나 자동 증가(auto increment)인 경우 해당하는 시퀀스나 테이블이 데이터베이스에 없을 때 나타나는 에러입니다.

이 문제를 해결하기 위해서는 다음의 점들을 확인해보셔야 합니다:

  1. Hibernate가 정해진 규칙에 따라 엔티티에 대한 테이블을 자동으로 생성하도록 설정이 되어 있는지 확인하세요. 예를 들어 application.properties 파일에 아래와 같은 설정을 추가할 수 있습니다.
   spring.jpa.hibernate.ddl-auto=create-drop

또는 application.yml 파일에는 다음과 같이 설정할 수 있습니다.

   spring:
     jpa:
       hibernate:
         ddl-auto: "create-drop"
  1. 만약 Sequence를 사용하여 ID를 자동 생성하려 한다면, 데이터베이스에 해당 시퀀스가 생성되어 있는지 확인하시고, 없다면 수동으로 생성해보세요.

  2. @GeneratedValue의 전략이 데이터베이스가 지원하는 방식과 일치하는지 확인하세요. 예를 들어 MySQL을 사용한다면, GenerationType.IDENTITY를 사용할 수 있습니다.

이와 관련된 더 자세한 내용은 아래의 문서를 참고하시면 좋을 것 같습니다:

설정을 확인하신 후에도 동일한 에러가 발생한다면, 다시 질문해주시길 바랍니다. 추가적인 도움이 필요하다면 언제든지 문의해주세요. 화이팅입니다!

bull0023님의 프로필 이미지
bull0023

작성한 질문수

질문하기