哪个Mybatis TypeHandler与PostgreSQL中存储为bytea的对象一起使用?

时间:2017-11-21 09:12:00

标签: java sql postgresql mybatis spring-mybatis

我使用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检查了查询并获得了下一个结果: Screenshot

所以,问题是:如何将 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
}

0 个答案:

没有答案