我使用Mybatis映射器执行SQL查询(Postgres),返回一些bytea类型的字段。在这个字段中存储了不同的对象类型,我遇到了反序列化的错误。
我有一个映射器:
<mapper namespace="WorkflowMapper">
<resultMap id="WorkflowResultMap" type="Workflow">
<id column="id" property="id" javaType="java.lang.String"/>
<result property="amount" column="amount" javaType="java.lang.Float" jdbcType="BLOB"/>
</resultMap>
<select id="findAllCustom" resultMap="WorkflowResultMap">
SELECT
procinst.proc_inst_id_ AS id,
amount_VAR.bytes_ AS amount,
...
FROM procinst
...
-- Some JOINS to request vauels
</select>
</mapper>
在运行时我遇到错误:
### Error querying database. Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'amount' from result set. Cause: org.postgresql.util.PSQLException: Bad value for type float : \xaced00057372000f6a6176612e6c616e672e466c6f6174daedc9a2db3cf0ec02000146000576616c7565787200106a6176612e6c616e672e4e756d62657286ac951d0b94e08b0200007870412547ae
我尝试添加typeHandeler="org.apache.ibatis.type.FloatTypeHandler"
,但它对错误没有影响。
我在Datagrip检查了查询并获得了下一个结果:
所以,问题是:如何将 bytea 类型中存储的值反序列化为对象?
修改 我确定该对象存储为 bytea 类型,因为该值存储在另一个表中(我使用Activi Engine Services来存储值,并且它使用相同的Mybatis库)。
存储对象的表具有下一个结构(看一下 bytes _ 字段):
create table act_ge_bytearray
(
id_ varchar(64) not null
constraint act_ge_bytearray_pkey
primary key,
rev_ integer,
name_ varchar(255),
deployment_id_ varchar(64)
constraint act_fk_bytearr_depl
references act_re_deployment,
bytes_ bytea,
generated_ boolean
)
;
对象类有下一个结构:
public class Workflow implements Sortable
{
private String id;
private Float amount;
// getters and setters are ommited
}