Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

개발자되기 프로젝트

data.sql작성 및 log조회 방법 본문

JPA

data.sql작성 및 log조회 방법

Seung__ 2021. 5. 23. 13:35

연습을 위해 h2 in-memory DB를 사용 중이다.

 

in memory DB기 때문에 프로그램이 종료되는 시점에 데이터가 날라간다.

 

따라서 일단 data.sql에 간단한 데이터를 저장하여 resources 하위에 저장하자.

 

그러면 jpa가 로딩할대 자동으로 한번 실행해준다.

 

test에서 활용할거니까 test하위 resources를 만들어 data.sql을 생성하자.

dta.sql생성

 

 

0. SQL insert into 


들어가기전에 SQL의 insert문 의 형태를 보자. 

insert into 테이블 이름('열1이름'. '열2이름', ....)
	value(value1, value2, ....)

table로 표현하면 다음과 같이 나타낼 수 있다.

열1 열2 열3
value1 value2 value3

사용 예시이다.

insert into user(id, name, email, created_at, updated_at)
values (1, 'hyun', 'hyun@sdf.com', now(), now());
id name email created_at(생성시간) updated_At(업데이트 시간)
1 hyun hyun@sdf.com ~~ ~~
2 park park@sdlf.com ~~ ~~

 

 

1. data.sql 작성 및 조회


call next value for hibernate_sequence;
insert into user(id, name, email, created_at, updated_at)
values (1, 'hyun', 'hyun@naver.com', now(), now());

call next value for hibernate_sequence;
insert into user(id, name, email, created_at, updated_at)
values (2, 'park', 'park@google.com', now(), now());

call next value for hibernate_sequence;
insert into user(id, name, email, created_at, updated_at)
values (3, 'lee', 'lee@naver.com', now(), now());

call next value for hibernate_sequence;
insert into user(id, name, email, created_at, updated_at)
values (4, 'kim', 'kim@google.com', now(), now());

call next value for hibernate_sequence;
insert into user(id, name, email, created_at, updated_at)
values (5, 'hyun', 'hyun@google.com', now(), now());

call nex value for hibernate_sequence는 id값을 자동으로 증가시키기 위해 사용되었다.

 

현재 입력된 데이터 말고 나중에 save를 할 경우,, hibernate_sequence에서 id값을 가져온다.

근데 id값은 primary key라 중복이 되면 안된다. 근데 이 값의 변경을 sequence에 알려주지 않으면

이후에 save를 할 때 문제가 발생한다. 그래서 일단 지정한다..?(무슨말인지 모르겠다..)

이후 mysql를 활용할 때 다른 방법으로 적용을 할 예정. 그 때 다시 자세히 알아보자..

 

테스트를 돌리면 다음과 같이 조회된다.

 

test는 이전 글에서 작성한 코드를 참고!

https://bsh-developer.tistory.com/9?category=1024330

 

2. DB에서 어떻게 동작하는지 확인해보자.


이전에 만든 application.yml에 jpa부분을 추가해주자. 그러면 log를 이쁘게 볼 수 있다.

 

spring:
  h2:
    console:
      enabled: true
  jpa:
    show-sql: true //기본  false
    properties:
      hibernate:
        format_sql: true

test를 실행하고 console에 찍힌 log를 보자.

 

Hibernate: 
    call next value for hibernate_sequence //sequence에 다음값 반영
Hibernate: 
    insert //save를 하기 때문에 insert
    into
        user 
        (created_at, email, name, updated_at, id) 
    values
        (?, ?, ?, ?, ?)
Hibernate: 
    select //find all을 위한 select
        user0_.id as id1_0_,
        user0_.created_at as created_2_0_,
        user0_.email as email3_0_,
        user0_.name as name4_0_,
        user0_.updated_at as updated_5_0_ 
    from
        user user0_

 

 

3. call next value for hibernate_sequence 안넣으면??


새로 insert를 할 경우, call next value for hibernate_sequence가 반영이 안되어 있으면,

sequence에서 새로 primary key에 1을 넣으라고 한다.

 

근데 이미 data base에 해당 id가 존재하기 때문에 오류가 발생한다.

 

따라서 primary key가 중복되지 않고 순차적으로 증가하도록 

call next value for hibernate_sequence가 적용되어야 한다.

 

'JPA' 카테고리의 다른 글

Repository 제공 기능 2  (0) 2021.05.23
Repository에서 제공하는 기능 예시  (0) 2021.05.23
JPA 설정 및 예시  (0) 2021.05.23
H2 In-Memory DB  (0) 2021.05.22
JPA 소개  (0) 2021.05.22
Comments