Spring,Blob下载,byte []大小增加两倍

时间:2011-02-21 00:54:14

标签: hibernate spring postgresql bytearray blob

我正在使用带有Hibernate和PostgreSQL的Spring 3.0,我遇到了以下问题:
我正在将文件上传到数据库,保存其内容类型,一切正常,数据库中字段的大小正常。但是当我尝试下载它时,Hibernate会返回两倍大小的字节数组。下载的文件当然已损坏。大小比数据库中的大小大两倍......我的代码如下:
字段域类(带映射):

private byte[] cv;

@Column(name="cv")
public byte[] getCv() {
  return this.cv;
}

加载对象的DAO函数:

public Candidate load(Integer id) {
  return (Candidate) getHibernateTemplate().get(Candidate.class, id);
}

会话工厂配置:

<bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

    <property name="dataSource">
        <ref bean="dataSource"/>
    </property>

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
            <prop key="hibernate.jdbc.batch_size">30</prop>
            <prop key="hibernate.show_sql">true</prop>
        </props>
    </property>

    <property name="packagesToScan" value="foo.foo.core.domain"/>

</bean>

SQL Create:

CREATE TABLE candidate
(
  id serial NOT NULL,
  cv bytea,
  ...
)

如果数据库有任何不同,数据库将被编码为UTF-8 我正在尝试使用org.springframework.jdbc.support.lob.DefaultLobHandler,但它没有做到这一点..任何想法?这让我发疯了......

2 个答案:

答案 0 :(得分:4)

找到解决方案,更改bytea输出的数据库设置,如下所示:

ALTER DATABASE SET bytea_output ='escape';

的奥斯卡。

答案 1 :(得分:0)

我遇到了同样的问题,但仍然不知道如何解决它,但肯定是编码问题。 我将两个图像保存在磁盘上,错误的是为原始代码的字符表示设置HEX代码,即

原始图像以下列字节开头(HEX表示):

FF D8 FF E0 ......

恢复的字节数组(双倍大小)如下:

66 66 64 38 66 66 65 30 ...

恰好是“ff d8 ff e0”的HEX编码为字符(f = 66HEX)

相关问题