2015-04-03 93 views
2

目前,在一個DB我有以下表(PostgreSQL 9.2):保存字節[]與休眠到PostgreSQL

     jackpot_image 

    id  jackpot_id   mime_type  image_data 
    serial  integer   varchar(32)   bytea 

我有以下實體:

@Entity 
@Table(name = "jackpot_image") 
public class JackpotImage { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name="jackpot_id") 
    private int jackpotId; 

    @Column(name="mime_type") 
    private String mimeType; 

    @Column(name="image_data") 
    private byte[] imageData; 

    //GET, SET 

} 

和THW以下DAO :

public class JackpotImageDao { 

    public JackpotImage selectImage(int imageId){ 
     String hql = "FROM JackpotImage WHERE id = :imageId"; 
     Query query = getSession().createQuery(hql); 
     query.setInteger("imageId", imageId); 
     return (JackpotImage) query.uniqueResult(); 
    } 

    public void save(JackpotImage image){ 
     getSession().saveOrUpdate(image); 
    } 
} 

事情是當我試圖保存,然後檢索圖像我得到不同的數組字節。現在

JackpotImage image; 
JackpotImageDao imageDao; 
//Getting image and ImageDAO 
imageDao.save(image); 
JackpotImage img = imageDao.selectImage(image.getId()); 

,所述image小號二進制數據的二進制數據從img不同'。爲什麼?我該如何解決這個問題?

+0

你說*圖像的二進制數據不同於img的二進制數據*,但是你沒有說你是如何確定的,或者是什麼區別。請爲小圖像顯示完整的樣本,或者至少顯示原始圖像和結果的第一個和最後一百個字節。編輯你的問題做到這一點,然後在完成後評論。 – 2015-04-04 08:03:22

+0

另外,什麼是你的PgJDBC版本,以及查詢的輸出是什麼'SELECT current_setting('bytea_output');'? – 2015-04-04 08:04:37

回答

-1

將註釋@Lob添加到字段imageData。

+0

謝謝你的回答。但是你不能擴大一點嗎?例如,爲什麼我應該使用@Lob註釋? – user3663882 2015-04-03 12:24:48

+0

因爲您在表中將列image_data定義爲bytea,即大數據類型。對於這種情況,字段imageData必須用@Lob註釋。看看[link](https://docs.oracle.com/javaee/6/api/javax/persistence/Lob.html) – 2015-04-03 12:28:19

+0

我已經添加了註釋,但它不起作用。我得到了'錯誤:列'image_data'的類型是bytea,但是表達式的類型是bigint' – user3663882 2015-04-03 12:30:22