当前使用版本(必填,否则不予处理)
3.4.0
该问题是如何引起的?(确定最新版也有问题再提!!!)
1.Postgresql中定义字段name text[]
2.po的字段 List<String> name,并设置@TableField(typeHandler = PgStringListTypeHandler.class)
3.调用mapper的selelctList(QueryWrapper<Po>),返回的name字段值为空,但数据库该字段有值,PgStringListTypeHandler.getResult打断点显示没有调用,@TableField(typeHandler = PgStringListTypeHandler.class,jdbcType=Array.class)也不行
PgStringListTypeHandler.class
@MappedJdbcTypes(JdbcType.ARRAY)
@MappedTypes(List.class)
public class PgStringListTypeHandler implements TypeHandler<List<String>> {
@Override
public void setParameter(PreparedStatement preparedStatement, int i, List<String> longs, JdbcType jdbcType) throws SQLException {
if (longs != null) {
preparedStatement.setArray(i, preparedStatement.getConnection().createArrayOf("text",longs.toArray()));
} else {
preparedStatement.setObject(i, null);
}
}
@Override
public List<String> getResult(ResultSet resultSet, String s) throws SQLException {
Array object = resultSet.getArray(s);
if (object == null) {
return null;
} else {
return Arrays.asList((String[]) object.getArray());
}
}
@Override
public List<String> getResult(ResultSet resultSet, int i) throws SQLException {
Array object = resultSet.getArray(i);
if (object == null) {
return null;
} else {
return Arrays.asList((String[]) object.getArray());
}
}
@Override
public List<String> getResult(CallableStatement callableStatement, int i) throws SQLException {
Array object = callableStatement.getArray(i);
if (object == null) {
return null;
} else {
return Arrays.asList((String[]) object.getArray());
}
}
}
重现步骤(如果有就写完整)
报错信息
Comment From: miemieYaho
你看 TableField#typeHandler 上面的源码注释
Comment From: idlesysman
谢谢!