2012-04-26 167 views
5

有趣的是,在實體:數據截斷誤差 - 數據太長

public static final int maxContentSize = 2097152; //2Mb 
@Lob 
@Column(length=maxContentSize) 
private byte[] content; 
@Column(length = 100) 
private String mimetype; 
@Column(length = 50) 
private String fileName; 

但是,某些文件(65-70k大小)插入OK,但大多出現錯誤:

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'CONTENT' at row 1 

我已經檢查過,在創建實體之前,尺寸是正確的。

+1

什麼是該表的模式定義?我不是指這些JPA註釋是什麼......它究竟是什麼? – DataNucleus 2012-04-26 08:00:32

回答

7

根據JPA文檔「長度」僅用於字符串屬性。

(Optional) The column length. (Applies only if a string-valued column is used.)

如果您正在使用的工具自動生成的DDL ..你可以使用「columnDefinition」屬性

@Column(columnDefinition = "LONGBLOB") 
private byte[] content; 
+1

哇。它基於這個答案:http://stackoverflow.com/questions/3503841/jpa-mysql-blob-returns-data-too-long/3507664#3507664但實際上它是一個blob列,工作文件是<65536字節... – csaadaam 2012-04-26 08:47:38

+0

現在它自動生成,但我剛剛知道我們將使用oracle數據庫,並且我們將寫入模式定義。所以現在我只需要將這個列改爲真正的中/ longblob – csaadaam 2012-04-26 08:52:38