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

wlwlgoyo님의 프로필 이미지
wlwlgoyo

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

JPA와 DB 설정, 동작확인

JPA와 DB설정, 동작확인 강의에서 오류메세지 발

해결된 질문

작성

·

619

·

수정됨

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
제가 오류를 못찾는건지 자료랑 비교했을 때 별 특이사항은 없는 것 같은데 자꾸 오류가 발생합니다.MEMBER_SEQ이 대체 뭔지 모르겠네요 ㅠㅠ 젤 하단 사진 테스트코드 실행 시 오류가 발생합니다.

 

오류1.png오류2.png

application.yml

 

server:
  port: 8081

#MVCC=TRUE를 넣어주면 여러개를 한번에 접근했을 때 좀 더 빨리 처리가 된다.
spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver
#ddl-auto: create -> 자동으로 테이블을 만들어주는 모드
    jpa:
      hibernate:
        ddl-auto: create
      properties:
        hibernate:
#          show_sql: true System.out.~을 통해서 출력
          format_sql: true #logger를 통해 출력
#로그 레벨
#hibernate SQL로그를 디버그 모드로 쓴다는 것
#-> Hibernate가 남기는 모든 로그가 다 디버그 모드로 해서 JPA나 Hibernate가 생성하는 SQL이 다 보인다.
logging:
  level:
    org.hibernate.SQL: debug

 

Member

package jpabook.jpashop;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;
import lombok.Getter;
import lombok.Setter;

@Entity
@Getter
@Setter
public class Member {
    @Id @GeneratedValue
    private long id;
    private String username;

}

MemberRepository

package jpabook.jpashop;

import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;

@Repository
public class MemberRepository {
    @PersistenceContext
    private EntityManager em;

    public Long save(Member member){
        em.persist(member);
        return member.getId();
    }

    public Member find(Long id){
        return em.find(Member.class,id);
    }
}

MemberRepositoryTest

package jpabook.jpashop;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import static org.assertj.core.api.Assertions.*;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class) //junit한테 SpringBoot로 테스트 한다고 알려주는 것
@SpringBootTest
public class MemberRepositoryTest {
    @Autowired
    MemberRepository memberRepository;

    @Test
    @Transactional
    public void testMember(){
        //given
        Member member=new Member();
        member.setUsername("memberA");

        //when
        Long saveID= memberRepository.save(member);
        Member findMember=memberRepository.find(saveID);
        //then
        assertThat(findMember.getId()).isEqualTo(member.getId());
        assertThat(findMember.getUsername()).isEqualTo(member.getUsername());
    }
}

 

답변 3

0

보내주신 코드를 확인 후 알려주신 실행방법에 따라 실행했을 때, 저는 에러가 발생하지 않았습니다!
image제가 했던 방법은 다음과 같습니다.
1. 기존에 생성된 DB 파일 삭제: rm -rf ~/jpashop.mv.db

  1. 스프링 부트 프로젝트의 의존성에 있는 버전에 맞춰 H2 DB 설치: 2.2.224

  2. DB 생성: 강의자료를 참고해주십쇼!

  3. DB 실행

  4. 테스트 실행

해당 방법으로 한 번만 더 시도해보시겠습니까?

wlwlgoyo님의 프로필 이미지
wlwlgoyo
질문자

감사합니다! 안내주신대로 삭제 후 재설치 하였더니 정상 작동하였고, 제가 처음 h2 생성할 때 server가 아니라 embedded를 선택했던 것도 같더라구요.. 정상으로 됩니다 감사합니다 😊😊

0

안녕하세요. wlwlgoyo님, 공식 서포터즈 y2gcoder입니다.

spring boot 프로젝트 버전이 3.2 이상이라면 설치하신 H2 DB 버전이 2.1.214 버전 이상인지도 확인해주십쇼!

그보다 낮은 버전이라면 H2 DB를 다시 설치해주시고, DB 파일도 지우고 다시 생성해주십쇼!

그래도 해결되지 않으시면

 

실제 동작하는 전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx


주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요


추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명


링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

wlwlgoyo님의 프로필 이미지
wlwlgoyo
질문자

넵 아까 혹시나 해서 H2 버전도 확인했는데 2.2대 버전이었습니다! 구글 드라이브에 문제 사항 올리도록 하겠습니다.

wlwlgoyo님의 프로필 이미지
wlwlgoyo
질문자

https://drive.google.com/file/d/1PtJ6X0PcuJCDtOfIRnDK1GCKdumGTeaF/view?usp=sharing 링크 남깁니다!

 

문제 설명

: JpashopApplicationTests 실행 시

Caused by: org.hibernate.MappingException: The increment size of the [member_SEQ] sequence is set to [50] in the entity mapping while the associated database sequence increment size is [1].

=> "엔티티 매핑에서 시퀀스의 증가 크기가 50으로 설정되어 있지만, 실제 데이터베이스의 시퀀스의 증가 크기는 1로 설정되어 있다고 나와 있습니다." 라는 의미라고 하는데, Member 쪽 @Generated에 따로 설정해둔 것은 없는 상황입니다. 답답한 마음에 H2서버에 create sequence로 member_seq 1부터 시작한다라고 sequence를 만들어 두긴 했습니다.(이전부터 오류가 발생했고 해결을 위해 시퀀스를 h2서버에 생성했으나 오류메세지가 달라지는 점은 없습니다)

구글링 및 챗지피티를 이용했으나 도움 받지 못하였고, 인프런 질문에 저의 오류 상황과 비슷한 분들이 있다는 것을 발견했는데 다들 링크를 남기셨더라구요 그래서 해결에 도움을 받고자 링크 남깁니다.

 

0

안녕하세요. wlwlgoyo님, 공식 서포터즈 y2gcoder입니다.

application.yml 의 들여쓰기를 확인해보시겠습니까?
jpa 는 datasource와 동일한 레벨에 있어야 하는데 보여주신 코드에서는 spring.datasource 하위에 jpa를 두신 것 같습니다!

server:
  port: 8081

#MVCC=TRUE를 넣어주면 여러개를 한번에 접근했을 때 좀 더 빨리 처리가 된다.
spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/jpashop
    username: sa
    password:
    driver-class-name: org.h2.Driver
#ddl-auto: create -> 자동으로 테이블을 만들어주는 모드
  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
#        show_sql: true System.out.~을 통해서 출력
        format_sql: true #logger를 통해 출력
#로그 레벨
#hibernate SQL로그를 디버그 모드로 쓴다는 것
#-> Hibernate가 남기는 모든 로그가 다 디버그 모드로 해서 JPA나 Hibernate가 생성하는 SQL이 다 보인다.
logging:
  level:
    org.hibernate.SQL: debug


감사합니다.

wlwlgoyo님의 프로필 이미지
wlwlgoyo
질문자

안내주신대로 변경했음에도 불구하고 Caused by: org.hibernate.MappingException: The increment size of the [member_SEQ] sequence is set to [50] in the entity mapping while the associated database sequence increment size is [1].

같은 오류가 발생합니다ㅠㅠ

wlwlgoyo님의 프로필 이미지
wlwlgoyo

작성한 질문수

질문하기