2012-04-26 166 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