我正在使用pg-jdbc/JDBI在Postgres表中执行准备好的批插入,以便使用显式RETURNING子句获得生成的id值列表:
PreparedBatch b = getHandle().prepareBatch("INSERT INTO death_star(id,exhaust_port) VALUES ( :id, :exhaust_port) RETURNING id;");
for (RebelPilot p : rebelPilots) {
b.add().bind("id",p.getId()).bind("exhaust_port",p.getProtonTorpedo());
}
ResultSetMapper<Long> mapper = new IdMapper()
GeneratedKeys<Long> gk = b.executeAndGenerateKeys(mapper);
return gk.list()
当语句准备好后,pg-jdbc会无意识地附加一个额外的
RETURNING *
在现有的
RETURNING
条款导致以下格式错误的憎恶:
INSERT INTO death_star(id,exhaust_port) VALUES ( ?, ?) RETURNING id RETURNING *;
如果我删除了显式的RETURNING子句,该语句可以正常工作;但是,它会导致返回目标表中的所有字段,这在插入大量数据的许多情况下是非常不可取的。
有什么方法可以阻止pg-jdbc参与这种行为吗?
测试依赖项:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1207.jre7</version>
</dependency>
<dependency>
<groupId>org.jdbi</groupId>
<artifactId>jdbi</artifactId>
<version>2.71</version>
</dependency>