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

Mat*_*Mat 5 postgresql spring hibernate blob bytearray

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

private byte[] cv;

@Column(name="cv")
public byte[] getCv() {
  return this.cv;
}
Run Code Online (Sandbox Code Playgroud)

加载对象的DAO函数:

public Candidate load(Integer id) {
  return (Candidate) getHibernateTemplate().get(Candidate.class, id);
}
Run Code Online (Sandbox Code Playgroud)

会话工厂配置:

<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>
Run Code Online (Sandbox Code Playgroud)

SQL创建:

CREATE TABLE candidate
(
  id serial NOT NULL,
  cv bytea,
  ...
)
Run Code Online (Sandbox Code Playgroud)

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

小智 4

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

更改数据库设置 bytea_output='escape';

奥斯卡.

  • 如果这解决了您的问题,您还可以通过将 JDBC 驱动程序更新到版本 9.0-801 来解决它。该版本支持 Postgresql 9.0,此时 bytea 转义格式默认更改为“hex”(效率更高)。 (2认同)