0
这些是我通过JPA插入到PostgreSQL时需要完成的事情。Spring MVC JPA原生插入返回生成的列
1)插入到一个表具有以下加入到所述插入件的端部“ON CONFLICT什么都不做”(或一些注释如果存在)
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);
很好的回答,让我得到了我需要的最终答案。你可以修改你的答案,并说明我需要删除修改,然后我可以返回你说的整数值?修改使得我没有得到结果。我删除了它,并能够获得Long或Integer,甚至可以使用我正在使用的Model。我只需在返回的“RETURNING”参数中返回该模型中的所有值。 –
一旦答案更新,我会接受它!并希望它会帮助别人:) –
啊,是的,修改注释将无法正常工作。 – Kayaman