Java JPA、Mysql Blob返回的数据太长
我的实体中有一些Java JPA、Mysql Blob返回的数据太长,java,hibernate,jpa,blob,Java,Hibernate,Jpa,Blob,我的实体中有一些byte[]字段,例如: @Entity public class ServicePicture implements Serializable { private static final long serialVersionUID = 2877629751219730559L; // seam-gen attributes (you should probably edit these) @Id @GeneratedValue priv
byte[]
字段,例如:
@Entity
public class ServicePicture implements Serializable {
private static final long serialVersionUID = 2877629751219730559L;
// seam-gen attributes (you should probably edit these)
@Id
@GeneratedValue
private Long id;
private String description;
@Lob
@Basic(fetch = FetchType.LAZY)
private byte[] picture;
在我的数据库模式中,该字段设置为BLOB
,因此这应该可以。无论如何:每次当我尝试插入图片或pdf时-没有比1mb更大的内容,我只收到这个
16:52:27,327 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: 22001
16:52:27,327 ERROR [JDBCExceptionReporter] Data truncation: Data too long for column 'picture' at row 1
16:52:27,328 ERROR [STDERR] javax.persistence.PersistenceException: org.hibernate.exception.DataException: could not insert: [de.ac.dmg.productfinder.entity.ServicePicture]
16:52:27,328 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:629)
16:52:27,328 ERROR [STDERR] at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:218)
16:52:27,328 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
16:52:27,328 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
16:52:27,328 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
16:52:27,328 ERROR [STDERR] at java.lang.reflect.Method.invoke(Unknown Source)
16:52:27,328 ERROR [STDERR] at org.jboss.seam.persistence.EntityManagerInvocationHandler.invoke(EntityManagerInvocationHandler.java:46)
16:52:27,328 ERROR [STDERR] at $Proxy142.persist(Unknown Source)
我已经检查了我的MySQL cnf,并且
max_allowed
参数设置为16M
-我是否遗漏了什么?这取决于图片
列使用的列类型。根据您的需要,使用:
:最大长度为255字节TINYBLOB
:最大长度为65535字节BLOB
:最大长度为16777215字节MEDIUMBLOB
:最大长度为4294967295字节LONGBLOB
列的长度属性来“控制”MySQL将使用的类型,例如:
@Lob @Basic(fetch = FetchType.LAZY)
@Column(length=100000)
private byte[] picture;
根据长度
,您将获得:
0 < length <= 255 --> `TINYBLOB`
255 < length <= 65535 --> `BLOB`
65535 < length <= 16777215 --> `MEDIUMBLOB`
16777215 < length <= 2³¹-1 --> `LONGBLOB`
0
在本例中,我们必须使用以下语法:
public class CcpArchive
{
...
private byte[] ccpImage;
...
@Lob
@Column(nullable = false, name = "CCP_IMAGE", columnDefinition="BINARY(500000)")
public byte[] getCcpImage()
{
return ccpImage;
}
...
}
我使用下面的,它的作品的图像
@Lob
@Column(name = "file", columnDefinition = "LONGBLOB")
private byte[] file;
通过这个链接解决了这个问题——简言之,MySQL Blob的最大大小为64k