【发布时间】:2016-11-30 18:45:03
【问题描述】:
这些是我通过 JPA 插入 PostgreSQL 时需要完成的事情。
1) 插入表格,在插入末尾添加以下内容“ON CONFLICT DO NOTHING”(或一些注释,如果存在)
2) 返回生成的 id 列
目前我正在使用以下方法,但它不返回生成的列...
@Transactional
@Modifying
@Query(nativeQuery = true, value = "INSERT INTO table_name (value1) values(?1) ON CONFLICT DO NOTHING")
int insertWithoutConflict(Long value1);
我所拥有的不涉及 JPA 的解决方案如下......
try(Connection conn = DatabaseUtils.getConnection()) {
Statement statement = conn.createStatement();
statement.execute(query, Statement.RETURN_GENERATED_KEYS);
ResultSet resultSet = statement.getGeneratedKeys();
if (resultSet.next())
return resultSet.getLong(1);
}
唯一的问题是我要绕过我们当前的流程,然后必须开始实现连接池,我不想参与其中。我想知道这个解决方案在 JPA 或 Hibernate 中是否可行。
根据@Kayaman 回答
@Transactional
@Query(nativeQuery = true, value = "INSERT INTO My_Table(value_1, value_2) values(?1, ?2) RETURNING any_column")
Long insertWithoutConflict(String value1, Long value2);
也可以返回我相信的模型对象
@Transactional
@Query(nativeQuery = true, value = "INSERT INTO My_Table(value_1, value_2) values(?1, ?2) RETURNING column_1, columnName_2, columnName_3, columnName_4")
YourModelObject insertWithoutConflict(String value1, Long value2);
【问题讨论】:
标签: java spring postgresql hibernate jpa