반응형
keyHolder.getKey()가 null을 반환합니다.
"Spring in action 5"의 코드가 작동하지 않는 이유는 무엇입니까(keyHolder.getKey()는 null을 반환하지만 엔티티는 DB에 저장됨)?
private long savePizzaInfo(Pizza pizza) {
pizza.setCreatedAt(new Date());
PreparedStatementCreator psc =
new PreparedStatementCreatorFactory(
"insert into PIZZA (name, createdAt) values (?, ?)",
Types.VARCHAR, Types.TIMESTAMP
).newPreparedStatementCreator(
Arrays.asList(
pizza.getName(),
new Timestamp(pizza.getCreatedAt().getTime())));
KeyHolder keyHolder = new GeneratedKeyHolder();
template.update(psc, keyHolder);
return keyHolder.getKey().longValue();
}
내 DB 테이블:
CREATE TABLE PIZZA
(
ID bigint DEFAULT (NEXT VALUE FOR
PUBLIC.SYSTEM_SEQUENCE_12CA966F_4FFD_469C_BA69_80BB93916EF3) AUTO_INCREMENT
PRIMARY KEY NOT NULL,
NAME varchar(50) NOT NULL,
CREATEDAT timestamp NOT NULL
);
CREATE UNIQUE INDEX PRIMARY_KEY_4 ON PIZZA (ID);
당신은 지시해야 합니다.PreparedStatementCreatorFactory
생성된 키를 반환하는 인스턴스:
PreparedStatementCreatorFactory preparedStatementCreatorFactory = new PreparedStatementCreatorFactory(
"insert into PIZZA (name, createdAt) values (?, ?)",
Types.VARCHAR, Types.TIMESTAMP
);
// By default, returnGeneratedKeys = false so change it to true
preparedStatementCreatorFactory.setReturnGeneratedKeys(true);
PreparedStatementCreator psc =
preparedStatementCreatorFactory.newPreparedStatementCreator(
Arrays.asList(
pizza.getName(),
new Timestamp(pizza.getCreatedAt().getTime())));
아래 코드에서 준비된 문 알림을 지정해야 합니다. RETURN_GENERATE_KEYS와 같은 것과 같은 것이 필요합니다.
final PreparedStatementCreator psc = new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(final Connection connection) throws SQLException {
final PreparedStatement ps = connection.prepareStatement("INSERT INTO `names` (`name`) VALUES (?)",
Statement.RETURN_GENERATED_KEYS);
ps.setString(1, name);
return ps;
}
};
대신 SimpleJdbcInsert를 사용하는 것이 어떻습니까?
dbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns(
"Primary_key");
Map<String, Object> parameters = new HashMap<>();
parameters.put("Column_NAME1", bean.getval1());
parameters.put("Column_NAME2", bean.getval2());
// execute insert
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(
parameters));
// convert Number to Int using ((Number) key).intValue()
return ((Number) key).intValue();
언급URL : https://stackoverflow.com/questions/53655693/keyholder-getkey-return-null
반응형
'programing' 카테고리의 다른 글
git merge: 다른 파일로 이동한 코드에 변경 사항 적용 (0) | 2023.06.22 |
---|---|
속성에 대한 잠재적인 하위 요소 및 속성을 가진 사용자 지정 web.config 섹션을 어떻게 정의합니까? (0) | 2023.06.22 |
unix 및 mysql을 사용하여 wordpress 덤프(.wxr) 만들기 (0) | 2023.06.22 |
Mongodb 집계 파이프라인 그룹 푸시를 제한하는 방법 (0) | 2023.06.22 |
C에서 포인터 유형 간의 캐스팅이 정의되지 않은 동작은 언제입니까? (0) | 2023.06.22 |