2011-03-29 31 views
2

我已經在MSSQL.Now圖像數據類型的圖像數據類型以二進制格式存儲圖像現在我已經將我的數據庫從MSSQL遷移到Postgres 9.0,並嘗試將圖像文件存儲在bytea字段中。當我試圖轉換這些字節轉換成圖像文件,雖然我沒有得到任何錯誤,但圖像是沒有得到呈現,其中爲相同的Java代碼工作正常與MSSQL.My應用是支柱基於冬眠冬眠application.My DTO是像以下各項圖像沒有得到存儲在postgres

@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; 
    } 




} 

請幫我解決這個問題

+0

什麼是數據庫列類型?您是否比較了PostgreSQL中存儲的內容,MSSQL中存儲的內容以及實體中的內容? – 2011-03-29 11:27:09

+0

在MSSQL中,列是圖像類型,在postgres中是如果輸入bytea。在代碼中,正如我們上面看到的使用字節數組。 – coder 2011-03-29 12:04:55

回答

2

哪ve PostgreSQL的rsion是你用的嗎?您是否使用服務器版本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的值進行比較。

+0

8.4驅動程序和9.0服務器確實是一個問題,如果沒有調整bytea_output配置參數。但是最好升級JDBC驅動程序。 http://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-BYTEA-OUTPUT – 2011-03-29 12:38:53

+0

是的,我正在使用postgres9.0。我已經更改postgresql.conf文件,從十六進制bytea_output轉義。但它不起作用。 – coder 2011-03-29 12:51:54

+0

謝謝!有效。 (對不起,以前犯了一個小錯誤)。 – coder 2011-03-29 13:10:25