JPA,Mysql Blob返回的数据太长

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-我缺少什么吗?

回答:

这完全取决于用于picture列的列类型。根据您的需要,使用:

  • TINYBLOB:最大长度为255个字节
  • BLOB:最大长度为65,535字节
  • MEDIUMBLOB:最大长度16,777,215字节
  • LONGBLOB:最大长度为4,294,967,295字节

请注意,如果您是通过JPA批注生成表的,则可以通过指定的length属性来“控制” MySQL将使用的类型Column,例如:

@Lob @Basic(fetch = FetchType.LAZY)

@Column(length=100000)

private byte[] picture;

根据length,您将获得:

       0 < length <=      255  -->  `TINYBLOB`

255 < length <= 65535 --> `BLOB`

65535 < length <= 16777215 --> `MEDIUMBLOB`

16777215 < length <= 2³¹-1 --> `LONGBLOB`

以上是 JPA,Mysql Blob返回的数据太长 的全部内容, 来源链接: utcz.com/qa/400509.html

回到顶部