해결된 질문
작성
·
667
1
@Override
public Item save(Item item) {
String sql = "insert into item(item_name, price, quantity)" +
" values (:itemName,:price,:quantity)";
BeanPropertySqlParameterSource param = new BeanPropertySqlParameterSource(item);
KeyHolder keyHolder = new GeneratedKeyHolder();
template.update(sql, param, keyHolder);
long id = keyHolder.getKey().longValue();
item.setId(id);
return item;
}
답변 2
2
저도 마찬가지로 postgresql로 진행하다가 같은 문제를 만나서, getKeys() 로 맵을 받은 후, 그곳에서 id를 가져오는 방식을 사용했습니다.
혹시나 해서 질문란을 오니 역시나 훌륭한 답변이 있었군요. 전 이 글을보고 key column을 명시해 주는 방향이 낫다고 생각해서 이 방법으로 변경하였습니다.
왜냐하면 그렇게 해야 아주 조금이라도 서버-DB간 주고 받는 데이터가 줄어들지 않나 싶었습니다.
key column을 명시하지 않은 경우:
서버에 쿼리 날릴 때 키 컬럼 어레이 부분을 보내지 않음.
하지만 DB에서 보내오는 keyHolder 값에 모든 컬럼의 값이 포함. (id, item_name, price, quantity)
key column을 명시한 경우:
서버에 쿼리 날릴 때 키 컬럼 어레이 new String[]("id)를 포함.
대신 DB에서 보내오는 keyHolder 값에 id 컬럼 값만 포함.
엔티티의 컬럼 값이 늘어날수록, 두 경우의 데이터 전송량의 차이는 더 늘어날 것 같습니다.
https://shanepark.tistory.com/383
후에 블로그에 작성해 두셨네요