JPA - 更新二进制数据

Posted

技术标签:

【中文标题】JPA - 更新二进制数据【英文标题】:JPA - Update binary data 【发布时间】:2011-03-22 00:17:55 【问题描述】:

我是 JPA 和休眠的新手。

我正在使用 HSQLDB 2.0 和 hibernate-JPA 将图像插入 BINARY 列。我注释如下

@Lob
private byte[] profileImage;

我可以将图像插入数据库。

我正在从数据库中检索实体以及二进制列并将字节数组转换为图像。

但是当我请求在更新后再次持久化实体时,我收到以下错误。

Caused by: org.hibernate.exception.DataException: Could not execute JDBC batch update
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:77)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:253)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:237)
    at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
    at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
    at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
    at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
    at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
    at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
    at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
    ... 68 more

引起:java.sql.BatchUpdateException:数据异常:字符串数据,右截断 在 org.hsqldb.jdbc.JDBCPreparedStatement.executeBatch(未知来源) 在 org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) 在 org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:246) ... 76 更多

谁能告诉我可能是什么问题?

提前谢谢你,

问候, 尼兰詹

【问题讨论】:

【参考方案1】:

您需要使用最新的 Hibernate 3.6.2 和 HSQLDB 2.1。 此外,使用 LONGVARBINARY 或 BLOB 列来存储图像。 BINARY 列在图像数据之后存储额外的零字节以填充其声明的长度,而其他两种类型不添加零填充。

【讨论】:

以上是关于JPA - 更新二进制数据的主要内容,如果未能解决你的问题,请参考以下文章

Java EE/JPA:提高查询性能 - 将 UUID 存储为二进制

iOS FMDB 无法更新二进制数据的问题

SQLServerException:将截断字符串或二进制数据的解决方法

mysql二进制日志详解

关系型数据库之Mysql二进制日志管理

如何设计数据库以轻松更新和删除形成二进制类型概念的行?