• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

@SelectKey 를 사용하는 이유를 알수 있을까요?

22.02.21 19:20 작성 조회수 514

0

글 수정할때 시퀀스 값에 원래 content_seq.nextval 로

@INsert에 넣으면 문제가 되나요? 잘 이해가 안되네요 . 

아래는  해당 코드입니다.

@SelectKey(statement = "select content_seq.nextval from dual", keyProperty = "content_idx", before = true, resultType = int.class)

@Insert("insert into content_table(content_idx, content_subject, content_text, " +

"content_file, content_writer_idx, content_board_idx, content_date) " +

"values (#{content_idx}, #{content_subject}, #{content_text}, #{content_file, jdbcType=VARCHAR}, " +

"#{content_writer_idx}, #{content_board_idx}, sysdate)")

void addContentInfo(ContentBean writeContentBean);

 

답변 2

·

답변을 작성해보세요.

1

시퀀스 사용 부분입니다.

시퀀스는 1부터 1씩 증가되는 유일값을 구하기 위해 사용합니다.

각 글들을 구분하기 위한 유일값이 필요하기 때문에 시퀀스를 사용하는 것이고

그 시퀀스를 insert 퀄리 수행전 미리 구해서 사용하기 위해 @SelectKey를 사용합니다.

그리고 insert 문제에서 직접 하지 않는 이유는

웹이라는건 많은 사람들이 동시에 서비스를 이용할 수 있습니다.

그때문에 글을 저장하고 현재 작성한 글 정보를 불러오는 사이 누군가 글을 작성하게 되면 내가 작성한 글이 아닌 남이 작성한

글을 불러올 수도 있게 되버립니다.

그래서 시퀀스 값을 미리 구하고 저장하는 작업을 취하게 됩니다.

저장만 하고 끝내면 되는 상황이라면 필요가 없지만 저장 후 작성한 글을 보기를 구현할 때

매우 적은 확률로 오동작 하는걸 방지하기 위함입니다.

이건 스프링에서 하는게 아닌 모든 웹 개발 수행시 사용하는 처리 기법입니다

감사합니다.

paikdabang 님의 프로필

paikdabang

질문자

2022.03.08

명쾌한 답변 감사합니다.

0

paikdabang 님의 프로필

paikdabang

질문자

2022.02.21

혹시 해당 글쓴 내용을 읽는 페이지에 바로 뿌려주기 위해서 

@Selectkey 과정이 필요 한건가요?