`
周一Monday
  • 浏览: 346270 次
  • 来自: 北京
社区版块
存档分类
最新评论

关于Hibernate处理blob类型要注意的问题

 
阅读更多

今天使用Hibernate插入一个图片时候总是报这个错误:

Data truncation: Data too long for column 'photo' at row 1

 

先说一下错误的原因吧。

 

这个photo 我是这么定义的:private byte[] photo; 因为我在hibernate.cfg.xml中配置了

<property name="hibernate.hbm2ddl.auto">update</property> 所以可以自动生成表结构。

而错就错在这个表结构的photo列有问题。

看下图:



生成的是blob 类型。

而MySQL的文档是这么解释的:

BLOB[(M)]

最大长度为65,535(2161)字节的BLOB列。

可以给出该类型的可选长度M。如果给出,则MySQL将列创建为最小的但足以容纳M字节长的值的BLOB类型。

 

而我插入的图片大小大于了这个范围,所以总是插入不进去。

 

解决办法:

将blob改为longblob。关于longblob类型MySQL是这么解释的:

LONGBLOB

最大长度为4,294,967,2954GB(2321)字节的BLOB列。LONGBLOB列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。

 

果然,换成longblob就好了。

 

经验总结:有时候使用Hibenrate自动生成的表结构,可能跟实际需求有差别。所以,通过Hibernate自动生成后的表结构一定要亲自检查一下,一定要满足你的具体的实际需求才好啊。

总之:一切从实际出发!

 

附:测试代码

@Test
	public void testSave() throws Exception {
		InputStream in = new FileInputStream("src/cat.jpg");
		byte[] photo = new byte[in.available()];
		System.out.println(in.available()); //81108
		in.read(photo);
		in.close();

		User user = new User();
		user.setBirthday(new Date());
		user.setDesc("描述....");
		user.setGender(User.GENDER_FEMALE);
		user.setName("monday");
		user.setPhoto(photo);
		user.setResume("自我介绍...");

		Session session = sessionFactory.openSession();
		Transaction tx = session.beginTransaction();
		session.save(user);
		tx.commit();
		session.close();
	}

 

  • 大小: 27 KB
分享到:
评论

相关推荐

    hibernate对Blob类型字段进行数据添加.txt

    在 Java 应用开发中,尤其是使用 ORM 框架如 Hibernate 进行持久化层开发时,如何高效地处理 BLOB 类型字段成为了一个关键问题。 本文档将详细介绍如何使用 Hibernate 对 Blob 类型字段进行数据添加的过程,并通过...

    Hibernate读取blob字段

    在Java的持久化框架Hibernate中,Blob类型常用于存储大对象(Large Object),如图片、音频、视频或大型文本文件等。本篇文章将深入探讨如何使用Hibernate读取数据库中的Blob字段,以及涉及到的相关知识点。 首先,...

    JDBC+Hibernate将Blob数据写入Oracle

    在Oracle数据库中,BLOB类型的字段具有特殊的处理方式,尤其在使用JDBC(Java Database Connectivity)和Hibernate框架时,需要特别注意其写入过程。以下是对“JDBC+Hibernate将Blob数据写入Oracle”这一主题的深入...

    Hibernate对BLOB CLOB操作

    在使用Hibernate操作BLOB和CLOB时,需要注意一些潜在的问题,比如内存管理,因为大数据对象可能会占用大量内存。另外,对于大文件的读写,可能需要分块处理,避免一次性加载整个文件到内存。同时,确保数据库支持...

    hibernate保存blob,clob对象

    在实际项目中,还需要考虑性能优化、错误处理等问题,例如使用流式处理减少内存占用,以及适当地配置Hibernate的缓存策略等。了解并熟练掌握这些技巧,能帮助我们在处理大数据类型时更加高效和稳定。

    使用hibernate对oracle读取blob

    处理Blob数据时,应考虑到性能问题。大Blob对象可能导致内存压力,因此在读取时,推荐使用流式处理而不是一次性加载整个Blob到内存。同时,注意关闭所有打开的流以避免资源泄漏。 综上所述,使用Hibernate和JDBC...

    Hibernate对Blob,Clob的操作

    总之,Hibernate通过提供对Blob和Clob的直接支持,使得在Java Web应用中处理大数据类型变得相对简单。正确理解和使用这些特性,可以有效地管理数据库中的大对象数据,提高应用的灵活性和可维护性。

    java中(注解符)处理Clob(blob)类型

    四、处理 Clob 和 Blob 类型的常见问题 在处理 Clob 和 Blob 类型时,常见的问题包括: * 配置错误:如果配置错误,可能会导致数据读取或写入失败。 * 数据太大:如果数据太大,可能会导致内存溢出或性能问题。 * ...

    jdbc+hibernate存取blob字段

    在使用Hibernate时,处理BLOB字段的过程会有所不同,因为Hibernate提供了一种更面向对象的方式来操作数据库。你可能需要定义一个实体类,包含BLOB类型的属性,并使用Hibernate的Session接口来保存或更新对象。例如:...

    关于在Hibernate中对于Clob,Blob字段的处理方法

    在Java的持久化框架Hibernate中,处理大数据类型如Clob(Character Large Object)和Blob(Binary Large Object)是常见的需求,这些数据类型通常用于存储大量的文本或二进制数据。Oracle数据库提供了支持Clob和Blob...

    使用JDBC和Hibernate来写入Blob型数据到Oracle中

    无论选择哪种方式,确保正确处理Blob数据的输入输出流以及关闭资源是至关重要的,以避免内存泄漏或资源占用过多的问题。在实际开发中,还应该考虑异常处理和事务管理,以确保数据的一致性和安全性。

    Hiberante读取BLOB数据类型.

    在Java的持久化框架Hibernate中,BLOB(Binary Large Object)数据类型被用来...总之,Hibernate提供了方便的机制来处理BLOB数据类型,但同时也需要开发者在处理大数据时注意性能和资源管理,以确保应用的稳定和高效。

    关于Clob类型在Hibernate中 的应用小结

    在写入时,先将字符串转换为Clob对象,再由Hibernate处理;读取时,将Clob内容转化为字符串。这种方式适用于数据量不是特别大的情况,因为所有数据都需要在内存中进行转换。 3. **直接使用Clob类型**: Hibernate...

    struts2.1 + hibernate3.2 + spring 2.5 实现blob数据上传、下载

    Hibernate则作为持久层框架,处理数据库操作;而Spring作为服务层和依赖注入框架,提供事务管理和其他服务,同时也支持AOP(面向切面编程)。 在这个项目中,Blob数据类型被用于存储非结构化的二进制大对象,比如...

    解析使用jdbc,hibernate处理clob/blob字段的详解

    5. **使用Hibernate处理`CLOB`和`BLOB`** - Hibernate提供了更高级的抽象,使得处理大对象更加方便。在配置文件中,可以将`CLOB`映射为`clob`,`BLOB`映射为`binary`。 - 例如,在Hibernate的实体类中,可以这样...

    hibernate动态映射表处理oracle的clob类型

    5. **性能优化**:处理CLOB时,需注意性能问题。例如,频繁读写CLOB可能导致性能下降,因此在设计系统时要考虑读写频率和数据量。 6. **示例代码**:在Hibernate中,读取和写入CLOB的代码可能如下: ```java // ...

    详解jdbc实现对CLOB和BLOB数据类型的操作

    JDBC实现对CLOB和BLOB数据类型的操作 在数据库中,存在两种类型的数据:CLOB(Character Large OBject)和BLOB(Binary Large OBject),它们用于存储大型数据,如文本、图片、音频、视频等。对CLOB和BLOB数据类型...

Global site tag (gtag.js) - Google Analytics