带有生成列的Spring MVC JPA本机插入物返回



这些是通过JPA插入PostgreSQL时需要完成的事情。

1)将以下添加到插入末尾的"冲突无需做任何事情"的末尾(如果存在的话,或某些注释)

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);

删除@Modifying注释,因为查询可能不会修改数据。

然后添加ON CONFLICT DO NOTHING RETURNING value1(或RETURNING *),但是您必须将int更改为Integer,因为冲突不会返回任何生成的值。

最新更新