Skip to content

Commit f590396

Browse files
committed
fix: explicitly specify a name of generated key to fix InvalidDataAccessApiUsageException on PostgreSQL.
See: https://stackoverflow.com/questions/17771306/spring-how-to-use-keyholder-with-postgresql The errors were like the following: org.springframework.dao.InvalidDataAccessApiUsageException: The getKey method should only be used when a single key is returned. The current key entry contains multiple keys: [{id=4, name=test, created_at=2019-06-09 21:14:26.889, created_by=2, updated_at=2019-06-09 21:14:26.889, updated_by=2, name_ru=null, slug=test}] Addressed to #1034
1 parent 49c56b2 commit f590396

File tree

10 files changed

+33
-9
lines changed

10 files changed

+33
-9
lines changed

src/main/java/ru/mystamps/web/feature/account/JdbcUserDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
2626
import org.springframework.jdbc.support.GeneratedKeyHolder;
2727
import org.springframework.jdbc.support.KeyHolder;
28+
import ru.mystamps.web.support.jdbc.JdbcUtils;
2829

2930
import java.util.Collections;
3031
import java.util.Date;
@@ -95,7 +96,8 @@ public Integer add(AddUserDbDto user) {
9596
int affected = jdbcTemplate.update(
9697
addUserSql,
9798
new MapSqlParameterSource(params),
98-
holder
99+
holder,
100+
JdbcUtils.ID_KEY_COLUMN
99101
);
100102

101103
Validate.validState(

src/main/java/ru/mystamps/web/feature/category/JdbcCategoryDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.jdbc.support.KeyHolder;
2828
import ru.mystamps.web.dao.dto.EntityWithParentDto;
2929
import ru.mystamps.web.dao.dto.LinkEntityDto;
30+
import ru.mystamps.web.support.jdbc.JdbcUtils;
3031
import ru.mystamps.web.support.jdbc.RowMappers;
3132

3233
import java.util.Collections;
@@ -104,7 +105,8 @@ public Integer add(AddCategoryDbDto category) {
104105
int affected = jdbcTemplate.update(
105106
addCategorySql,
106107
new MapSqlParameterSource(params),
107-
holder
108+
holder,
109+
JdbcUtils.ID_KEY_COLUMN
108110
);
109111

110112
Validate.validState(

src/main/java/ru/mystamps/web/feature/collection/JdbcCollectionDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.springframework.jdbc.support.GeneratedKeyHolder;
2929
import org.springframework.jdbc.support.KeyHolder;
3030
import ru.mystamps.web.dao.dto.LinkEntityDto;
31+
import ru.mystamps.web.support.jdbc.JdbcUtils;
3132

3233
import java.util.Collections;
3334
import java.util.Date;
@@ -168,7 +169,8 @@ public Integer add(AddCollectionDbDto collection) {
168169
int affected = jdbcTemplate.update(
169170
addCollectionSql,
170171
new MapSqlParameterSource(params),
171-
holder
172+
holder,
173+
JdbcUtils.ID_KEY_COLUMN
172174
);
173175

174176
Validate.validState(

src/main/java/ru/mystamps/web/feature/country/JdbcCountryDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.jdbc.support.GeneratedKeyHolder;
2727
import org.springframework.jdbc.support.KeyHolder;
2828
import ru.mystamps.web.dao.dto.LinkEntityDto;
29+
import ru.mystamps.web.support.jdbc.JdbcUtils;
2930
import ru.mystamps.web.support.jdbc.RowMappers;
3031

3132
import java.util.Collections;
@@ -107,7 +108,8 @@ public Integer add(AddCountryDbDto country) {
107108
int affected = jdbcTemplate.update(
108109
addCountrySql,
109110
new MapSqlParameterSource(params),
110-
holder
111+
holder,
112+
JdbcUtils.ID_KEY_COLUMN
111113
);
112114

113115
Validate.validState(

src/main/java/ru/mystamps/web/feature/image/JdbcImageDao.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
2626
import org.springframework.jdbc.support.GeneratedKeyHolder;
2727
import org.springframework.jdbc.support.KeyHolder;
28+
import ru.mystamps.web.support.jdbc.JdbcUtils;
2829

2930
import java.util.Collections;
3031
import java.util.HashMap;
@@ -55,7 +56,12 @@ public Integer add(String type, String filename) {
5556
params.put("filename", filename);
5657
KeyHolder holder = new GeneratedKeyHolder();
5758

58-
int affected = jdbcTemplate.update(addImageSql, new MapSqlParameterSource(params), holder);
59+
int affected = jdbcTemplate.update(
60+
addImageSql,
61+
new MapSqlParameterSource(params),
62+
holder,
63+
JdbcUtils.ID_KEY_COLUMN
64+
);
5965

6066
Validate.validState(
6167
affected == 1,

src/main/java/ru/mystamps/web/feature/image/JdbcImageDataDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
2626
import org.springframework.jdbc.support.GeneratedKeyHolder;
2727
import org.springframework.jdbc.support.KeyHolder;
28+
import ru.mystamps.web.support.jdbc.JdbcUtils;
2829

2930
import java.util.HashMap;
3031
import java.util.Map;
@@ -69,7 +70,8 @@ public Integer add(AddImageDataDbDto imageData) {
6970
int affected = jdbcTemplate.update(
7071
addImageDataSql,
7172
new MapSqlParameterSource(params),
72-
holder
73+
holder,
74+
JdbcUtils.ID_KEY_COLUMN
7375
);
7476

7577
Validate.validState(

src/main/java/ru/mystamps/web/feature/participant/JdbcParticipantDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.jdbc.support.GeneratedKeyHolder;
2727
import org.springframework.jdbc.support.KeyHolder;
2828
import ru.mystamps.web.dao.dto.EntityWithParentDto;
29+
import ru.mystamps.web.support.jdbc.JdbcUtils;
2930
import ru.mystamps.web.support.jdbc.RowMappers;
3031

3132
import java.util.Collections;
@@ -75,7 +76,8 @@ public Integer add(AddParticipantDbDto participant) {
7576
int affected = jdbcTemplate.update(
7677
addParticipantSql,
7778
new MapSqlParameterSource(params),
78-
holder
79+
holder,
80+
JdbcUtils.ID_KEY_COLUMN
7981
);
8082

8183
Validate.validState(

src/main/java/ru/mystamps/web/feature/series/JdbcSeriesDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
2626
import org.springframework.jdbc.support.GeneratedKeyHolder;
2727
import org.springframework.jdbc.support.KeyHolder;
28+
import ru.mystamps.web.support.jdbc.JdbcUtils;
2829
import ru.mystamps.web.support.jdbc.RowMappers;
2930

3031
import java.util.Collections;
@@ -120,7 +121,8 @@ public Integer add(AddSeriesDbDto series) {
120121
int affected = jdbcTemplate.update(
121122
createSeriesSql,
122123
new MapSqlParameterSource(params),
123-
holder
124+
holder,
125+
JdbcUtils.ID_KEY_COLUMN
124126
);
125127

126128
Validate.validState(

src/main/java/ru/mystamps/web/feature/series/importing/JdbcSeriesImportDao.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
2626
import org.springframework.jdbc.support.GeneratedKeyHolder;
2727
import org.springframework.jdbc.support.KeyHolder;
28+
import ru.mystamps.web.support.jdbc.JdbcUtils;
2829

2930
import java.util.Collections;
3031
import java.util.Date;
@@ -83,7 +84,8 @@ public Integer add(ImportSeriesDbDto importRequest) {
8384
int affected = jdbcTemplate.update(
8485
createSeriesImportRequestSql,
8586
new MapSqlParameterSource(params),
86-
holder
87+
holder,
88+
JdbcUtils.ID_KEY_COLUMN
8789
);
8890

8991
Validate.validState(

src/main/java/ru/mystamps/web/support/jdbc/JdbcUtils.java

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
public final class JdbcUtils {
2626

27+
public static final String[] ID_KEY_COLUMN = new String[]{"id"};
28+
2729
private JdbcUtils() {
2830
}
2931

0 commit comments

Comments
 (0)