작성
·
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)인 경우 해당하는 시퀀스나 테이블이 데이터베이스에 없을 때 나타나는 에러입니다.
이 문제를 해결하기 위해서는 다음의 점들을 확인해보셔야 합니다:
application.properties
파일에 아래와 같은 설정을 추가할 수 있습니다. spring.jpa.hibernate.ddl-auto=create-drop
또는 application.yml
파일에는 다음과 같이 설정할 수 있습니다.
spring:
jpa:
hibernate:
ddl-auto: "create-drop"
만약 Sequence를 사용하여 ID를 자동 생성하려 한다면, 데이터베이스에 해당 시퀀스가 생성되어 있는지 확인하시고, 없다면 수동으로 생성해보세요.
@GeneratedValue
의 전략이 데이터베이스가 지원하는 방식과 일치하는지 확인하세요. 예를 들어 MySQL을 사용한다면, GenerationType.IDENTITY를 사용할 수 있습니다.
이와 관련된 더 자세한 내용은 아래의 문서를 참고하시면 좋을 것 같습니다:
설정을 확인하신 후에도 동일한 에러가 발생한다면, 다시 질문해주시길 바랍니다. 추가적인 도움이 필요하다면 언제든지 문의해주세요. 화이팅입니다!