2012-12-28 44 views
1

我想堅持的圖像,如Oracle數據庫使用JPA斑點(11克)堅持的java.sql.Blob到Oracle BLOB(2.0)無法使用JPA

下面是我的實體類

@Entity 
@Table(name="MyTable") 
public class MyEntity implements Serializable { 

@Column(name="IMAGE_BLOB") 
private Blob imageBlob; 

public void setImageBlob(Blob imageBlob) { 
this.imageBlob = imageBlob; 
} 

public Blob getImageBlob() { 
return imageBlob; 
} 

}

下面是我的代碼,其中我試圖設置BLOB

InputSteram fis = new FileInputStream("C://folder1/folder2/image1.jpg"); 
byte[] imageByteArray= IOUtils.toByteArray(fis); 

Blob imageBlob = new SerialBlob(imageByteArray); 

MyEntity myEntity = new MyEntity(); 
myEntity.setImageBlob(imageBlob). 

當我運行上面的代碼代碼片段並將MyEntity持久化到數據庫中,我發現除了IMAGE_BLOB列值顯示爲null之外,所有值都正確地保留在數據庫中,它會拋出任何異常。我還驗證了我試圖設置的imageBlob不爲null。

任何人都可以幫助我解決這個問題。

+0

是否有任何特別的原因,你使用的是Blob對象而不是字節數組? –

+0

是的,我有幾個字節數組的問題,其中一個 - 我得到類轉換異常,oracle.sql.BLOB與oracle.sql.BLOB不兼容2)我在JPA中遇到了metamodel類奇異屬性問題。所以我被告知使用java.sql.Blob而不是字節數組。 –

+0

你以後如何查詢BLOB?我假設你正在驗證長度> 0? – Perception

回答

0
@LOB 
@Column(name="IMAGE_BLOB") 
private byte[] imageBlob; 

它工作的很好,我在Oracle DB中也做到了。所以如果你得到ClassCastException那麼你的Java代碼會有問題。

+0

我無法理解是什麼導致這個類轉換異常文我使用字節數組,如上面在我的實體類中提到的,我讀過,當有多個版本的ojdbc罐子時,我們面臨這個問題。但我只有一個jar,它是ojdbc6.jar。任何幫助將非常感激.. –

+0

我使用openJPA作爲持久性提供者 –

+0

我還啓用了jpa日誌跟蹤來檢查是否插入blob,但插入語句沒有Blob列(說COLUMN4)堆棧trace:openjpa.jdbc.SQL:Trace:正在執行prepstmnt 488316187 INSERT INTO SCHEMA_WEB.TABLE(COLUMN1,COLUMN2,COL3)VALUES(?,?,?)[params =?,?,?] –