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

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 TABLE candidate
(
  id serial NOT NULL,
  cv bytea,
  ...
)

如果数据库有什么不同的话,它是enncoded UTF-8。
我试着使用org.springframework.jdbc.support.lob.DefaultLobHandler,但它没有做到这一点。。有什么想法吗?我快疯了。。

最佳答案

找到解决方案,按如下方式更改bytea输出的DB设置:
ALTER DATABASE SET bytea_output='escape';
奥斯卡。

09-10 08:06
查看更多