如何在 getJdbcTemplate().query 中将 postgresql 数组转换为 java 数组

问题描述 投票:0回答:2

我正在使用 spring 与 postgresql 进行交互。这是我的问题。

人具有三个属性:

  1. 姓名(字符串)
  2. 爱好(字符串[])
  3. 性别(布尔值)

如果我尝试使用以下方法从数据库中获取人员列表

List<Person> person=  getJdbcTemplate().query("select * from person where name=?",new BeanPropertyRowMapper<person>(Person.class),name);

编译器提示

Failed to convert property value of type 'org.postgresql.jdbc.PgArray' to required type 'java.lang.String[]' for property 'hobbies';

有什么方法可以将 pgarray 映射到 java 数组吗?

java spring postgresql jdbctemplate
2个回答
0
投票

通过实现我们自己的 RowMapper

public class PersonRowMapper implements RowMapper<Person> 

现在,我们可以操作 rs.getArray() 的结果,然后返回 person。


0
投票

没找到jdbctemplate + pgArray的解决方法。所以我写了一些修复。
你可以使用自己的

ColumnMapRowMapper
.

public class ColumnRawMapper extends ColumnMapRowMapper {
        @Override
        protected Object getColumnValue(ResultSet rs, int index) throws SQLException {
            Object obj = rs.getObject(index);
            if (obj instanceof PgArray) {
                return ((PgArray) obj).getArray();
            }
            return super.getColumnValue(rs, index);
        }
    }

Map<String, Object> ggWp = jdbcTemplate.queryForObject("select * from temp where ss='3'", new ColumnRawMapper());
© www.soinside.com 2019 - 2024. All rights reserved.