KeyHolder 질문
182
작성한 질문수 31
@Override
public Item save(Item item) {
String sql = "insert into item (item_name, price, quantity) " +
"values(:itemName, :price, :quantity)";
SqlParameterSource param = new BeanPropertySqlParameterSource(item);
KeyHolder keyHolder = new GeneratedKeyHolder();
template.update(sql, param, keyHolder);
long key = keyHolder.getKey().longValue();
item.setId(key);
return item;
}
KeyHolder같은경우 id를 내부에서 직접 구성해줘야하기 때문에 쓰는거라고 알고있는데 서버를 열어서 추가를 해줄때마다 숫자가 증가되는걸 볼수있었습니다. 숫자가 증가되는건 코드에서 자체적으로 해주는건가요?
항상 답변감사드립니다.
답변 1
0
안녕하세요. 박민성님, 공식 서포터즈 y2gcoder입니다.
KeyHolder는 주로 DB에서 자동 생성해준 키를 가져오기 위해 사용합니다!
서버에서 데이터를 추가할 때마다 키의 숫자가 증가하는 것은, 데이터베이스가 자동 생성된 키를 관리하는 방식 때문입니다! 이는 코드 자체적으로 수행되는 것이 아니라, 데이터베이스 설정에 따라 자동으로 증가되는 값입니다.
감사합니다.
0
데이터베이스가 자동으로 증가하는 키(예: 자동 증가 ID)를 관리합니다!
KeyHolder는 이러한 Database가 자동 생성된 키 값을 애플리케이션 코드에서 사용할 수 있게 해줍니다.
데이터베이스에 데이터를 추가할 때, 해당 키 값은 데이터베이스의 설정(예: AUTO_INCREMENT 속성)에 의해 자동으로 관리되며, 이 값을 가져오기 위해 KeyHolder와 같은 메커니즘이 사용됩니다.
RepositoryTest의 패키지 위치가 domain인 이유
0
29
2
REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!
0
29
1
update()에 사용하는 setter 질문드립니다.
0
47
1
SQL 중심적 개발의 문제점에 대한 질문
0
72
1
혹시 Containing 을 안쓰신 이유가 있을까요?
0
83
2
[공유] 스프링부트 4.x 버전 mybatis 연동
0
173
1
@repository 어노테이션
0
89
3
ItemService
0
58
1
논리 커밋, 물리 커밋 질문드립니다.
0
54
1
내부 트랜잭션 커밋은 필수인가요?
0
57
1
프록시 커넥션 객체를 반환할 때 생성하는건가요?
0
54
1
Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)
2
178
2
JPQL 대신 네이티브 쿼리를 사용해야 하는 경우
0
77
1
@EventListener(ApplicationReadyEvent.class) 관련
0
88
1
트랜잭션 동기화 매니저와 데이터 소스
0
76
1
DB 관련 강의 개설 계획은 없으신건가요?
0
133
2
물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요
0
94
1
스프링 3 버전 이상 rollbackFor 변경된듯요
1
112
1
트랜잭션 전파 질문.
0
87
1
프로젝트 오픈 에러
0
126
1
외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다
0
83
2
같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환
0
72
1
h2 인메모리 테스트중 예약어 충돌날 경우 대처방법
0
102
1
커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문
0
98
2





