2013-10-30 55 views
0

我想將文件存儲到數據庫表中作爲byte[]。現在我有一個問題,關於將byte[]存儲到postgres數據庫表中與Hibernate。我有我的Entity類此實現:如何使用Hibernate將文件作爲byte []存儲到數據庫中?

@Column 
private byte[] bytes; 

在我的數據庫表也顯示了byte[]數據類型byte

現在我可以在這個列中看到plaintext(在我的例子中是我想要存儲在數據庫中的文件名)。對於每個字節,它將重複數據庫列中文件的名稱。但爲什麼?

是否需要另一個Hibernate註釋?

感謝您的幫助!

格爾茨 Marwief

+0

一般來說,將文件放入數據庫是一個壞主意。 (國際海事組織,這是一個好主意,如果你需要寫或更新文件交易) –

回答

3

您必須@Lob註釋字段。

注:如果列自動生成的,你可能認爲設置列定義與額外的註釋(如MYSQL)的:

@Column(columnDefinition="LONGBLOB")//or VARBINARY(128) if you need a smaller limit 
+0

@Lob不工作。我得到異常「列是類型bytea但表達式是bigint」 – Marwief

+0

請發佈與原始郵件的整個堆棧跟蹤。你也可以考慮刪除現有的列,如果這是自動生成的。 –

+0

我必須糾正我的答案!您的解決方案的作品你有什麼想法,如果一列用lob來註釋,可以存儲多少字節? – Marwief

0
@Column(columnDefinition = "LONGBLOB") 
private byte[] bytes; 
0

Domain

import javax.persistence.Lob; 
    @Lob 
    private byte[] image; 

Repository layer

byte[] image = getImageAsBytes(); 
    domain.setImage(image); 
    entityManager.save(domain); 

它應該起作用,至少它適合我們。沒有特別的魔力

相關問題