图像没有存储在postgres中

时间:2011-03-29 11:14:27

标签: java hibernate postgresql

我已经在MSSQL中以二进制格式存储了图像数据类型的图像。现在我已将我的数据库从MSSQL迁移到Postgres 9.0并尝试将图像文件存储在bytea字段中。当我尝试将这些字节转换为图像文件时我没有得到任何错误,但Image没有得到渲染,因为相同的Java代码与MSSQL正常工作。我的应用程序是struts基于hibernate的application.My hibernate dto就像下面 -

@Entity
@Table(name="Image_Type")
public class ImageType extends AbstractPO
 {


    private static final long serialVersionUID = 1L;

    private Long id;
    private Long ownerId;
    private Short ownerType;
    private String name;
    private String description;
    private Long typeId;
    private byte[] originalImage;
    private byte[] thumbNailImage;
    private byte[] terminalImage;
    private String createdBy;
    private Date createdOn;
    private String modifiedBy;
    private Date modifiedOn;
    private String rfu1;
    private String rfu2;
    private String rfu3;

    @Id @GeneratedValue(strategy=AUTO, generator="Image_Type_seq")
     @SequenceGenerator(name="Image_Type_seq", sequenceName="IMAGE_TYPE_IMAGE_TYPEID_SEQ")

    @Column(name="Image_TypeID", unique=true, nullable=false, precision=10, scale=0)
    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Column(name="OwnerID", precision=10, scale=0)
    public Long getOwnerId() {
        return this.ownerId;
    }

    public void setOwnerId(Long ownerId) {
        this.ownerId = ownerId;
    }

    @Column(name="OwnerType", precision=4, scale=0)
    public Short getOwnerType() {
        return this.ownerType;
    }

    public void setOwnerType(Short ownerType) {
        this.ownerType = ownerType;
    }

    @Column(name="Name", length=100)
    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Column(name="Description", length=100)
    public String getDescription() {
        return this.description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    @Column(name="TypeID", precision=10, scale=0)
    public Long getTypeId() {
        return this.typeId;
    }

    public void setTypeId(Long typeId) {
        this.typeId = typeId;
    }

    @Column(name="Original_Image")
    public byte[] getOriginalImage() {
        return this.originalImage;
    }

    public void setOriginalImage(byte[] originalImage) {
        this.originalImage = originalImage;
    }

    @Column(name="ThumbNail_Image")
    public byte[] getThumbNailImage() {
        return this.thumbNailImage;
    }

    public void setThumbNailImage(byte[] thumbNailImage) {
        this.thumbNailImage = thumbNailImage;
    }

    @Column(name="Terminal_Image")
    public byte[] getTerminalImage() {
        return this.terminalImage;
    }

    public void setTerminalImage(byte[] terminalImage) {
        this.terminalImage = terminalImage;
    }

    @Column(name="CreatedBy", length=50)
    public String getCreatedBy() {
        return this.createdBy;
    }

    public void setCreatedBy(String createdBy) {
        this.createdBy = createdBy;
    }

    @Column(name="CreatedOn", nullable=false, length=23)
    public Date getCreatedOn() {
        return this.createdOn;
    }

    public void setCreatedOn(Date createdOn) {
        this.createdOn = createdOn;
    }

    @Column(name="ModifiedBy", length=50)
    public String getModifiedBy() {
        return this.modifiedBy;
    }

    public void setModifiedBy(String modifiedBy) {
        this.modifiedBy = modifiedBy;
    }

    @Column(name="ModifiedOn", length=23)
    public Date getModifiedOn() {
        return this.modifiedOn;
    }

    public void setModifiedOn(Date modifiedOn) {
        this.modifiedOn = modifiedOn;
    }

    @Column(name="RFU1", length=100)
    public String getRfu1() {
        return this.rfu1;
    }

    public void setRfu1(String rfu1) {
        this.rfu1 = rfu1;
    }

    @Column(name="RFU2", length=100)
    public String getRfu2() {
        return this.rfu2;
    }

    public void setRfu2(String rfu2) {
        this.rfu2 = rfu2;
    }

    @Column(name="RFU3", length=100)
    public String getRfu3() {
        return this.rfu3;
    }

    public void setRfu3(String rfu3) {
        this.rfu3 = rfu3;
    }




}  

请帮我解决此问题

1 个答案:

答案 0 :(得分:2)

您使用的是哪个版本的Postgresql?您使用的是服务器版本9和JDBC驱动程序8.4吗? (因为如果是这样的话:Hibernate 3.3.2GA improperly loads bytea data from PostgreSQL 9.0 and all type mappings are correct

数据库中存储的实际值是多少?使用psql检查,并将前16个字节左右与预期值进行比较。由于它们是图像,您可以期望它们以某种格式魔术开始 - “JFIF”,“GIF”,“PNG”,“II”/“MM”等。您需要能够确定数据是否在被破坏时被保存,被加载时损坏或其他一些问题。在保存对象之前转储图像数组的前几个字节,并在加载后转换为与psql中的值进行比较。