- 浏览: 379408 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (116)
- 生活 (1)
- 工作 (56)
- 健康 (0)
- 感情 (0)
- IT (45)
- 数据库 (11)
- Spring处理lob数据 (0)
- org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection] (1)
- not on [com.mysql.jdbc.Connection]: specify a corresponding NativeJdbcExtractor; nested exception is java.lang.ClassCastException: com.mysql.jdbc.Connection (1)
- org.hibernate.DuplicateMappingException (1)
- js (3)
- Spring (2)
- PropertyPlaceholderConfigurer (1)
- Spring事务 (2)
- PROPAGATION_REQUIRED (1)
- PROPAGATION_SUPPORTS (1)
- PROPAGATION_MANDATORY (1)
- PROPAGATION_REQUIRES_NEW (1)
- setTimeout() (0)
- fn函数 (1)
- jstl标签 (1)
- 锚点 (1)
- 工作 urlrewrite 静态化 (1)
- 分享到微博 (1)
- hibernate (1)
- id to load is required for loading (1)
最新评论
-
wangyudong:
用Holer,只需要配置一个Access Key就搞定了htt ...
webservice发布以后在本地能够访问,但是在远程访问不了 -
梦幻无极:
[flash=200,200][url][img][list] ...
mysql Error Code : 1060 Duplicate column name 'ID' -
wqxdoc_pxiang9:
工程用什么软件
plc学习笔记 -
jiangxiankun:
请问一下这个需要什么jar包吗
用JAVA代码访问一段URL地址是否可用怎么写? -
361010911:
好乱!- -
java轮询程序的实现
Spring处理lob数据
- 博客分类:
- 工作
- not on [com.mysql.jdbc.Connection]: specify a corresponding NativeJdbcExtractor; nested exception is java.lang.ClassCastException: com.mysql.jdbc.Connection
- IT
- org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection]
在ssh项目中有一个需要上传、下载的功能,并且将图片信息存在数据库字段中,表的信息如下:
1.表service_domain_audit_change(oracle中)
字段 类型
表service_domain_audit_change(mysql中)
字段 类型
2.hibernate的配置文件如下:
主要截取了大字段类型:
3.Oracle中dao配置
mysql中dao配置
具体说明如下:
当时做mysql数据库的时候我就直接把oracle数据库的配置文件考过去了,本功能没有问题,在另外一个功能的时候出现了异常org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [com.mysql.jdbc.Connection]: specify a corresponding NativeJdbcExtractor; nested exception is java.lang.ClassCastException: com.mysql.jdbc.Connection
Caused by:
java.lang.ClassCastException: com.mysql.jdbc.Connection
mysql数据库中已经配置过<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
估计是到那个功能的时候她不知道找那个lobHandler了。
在 Hibernate 中操作 LOB 数据
提示
使用 Spring JDBC 时,我们除了可以按 byte[]、String 类型处理 LOB 数据外,还可以使用流的方式操作 LOB 数据,当 LOB 数据体积较大时,流操作是唯一可行的方式。可惜,Spring 并未提供以流方式操作 LOB 数据的 UserType(记得 Spring 开发组成员认为在实现上存在难度)。不过,www.atlassian.com 替 Spring 完成了这件难事,读者可以通过 这里 了解到这个满足要求的 BlobInputStream 类型。
Hibernate 为处理特殊数据类型字段定义了一个接口:org.hibernate.usertype.UserType。Spring 在 org.springframework.orm.hibernate3.support 包中为 BLOB 和 CLOB 类型提供了几个 UserType 的实现类。因此,我们可以在 Hibernate 的映射文件中直接使用这两个实现类轻松处理 LOB 类型的数据。
BlobByteArrayType:将 BLOB 数据映射为 byte[] 类型的属性;
BlobStringType:将 BLOB 数据映射为 String 类型的属性;
BlobSerializableType:将 BLOB 数据映射为 Serializable 类型的属性;
ClobStringType:将 CLOB 数据映射为 String 类型的属性;
一些参考文章:
1.Spring 让 LOB 数据操作变得简单易行
2.Struts+Spring+Hibernate浅见
3.解决websphere使用LobHandler写LOB字段的很迷惑人的错误
4.我曾经遇到的问题-请教SSH中Clob类型字段不能使用hibernate二级缓存的问题
5.Hibernate+Spring搞定Clob、Blob的存取
1.表service_domain_audit_change(oracle中)
字段 类型
ID NUMBER(11) SERVICE_CODE VARCHAR2(100) DOMAIN_NAME VARCHAR2(1000) AGENT_CODE VARCHAR2(100) NEW_ORGANIZE_NAME_CN VARCHAR2(200) NEW_USER_NAME_CN VARCHAR2(200) TRANSFER_DATE TIMESTAMP(6) CHECK_DATE TIMESTAMP(6) STATE VARCHAR2(10) CHECK_OPERATOR VARCHAR2(200) EXT1 VARCHAR2(2000) EXT2 VARCHAR2(2000) EXT3 VARCHAR2(2000) APPLY_TABLE BLOB OLD_ ORGANIZE_IDENTITY BLOB OLD_ USER _IDENTITY BLOB NEW_ ORGANIZE_IDENTITY BLOB NEW_ USER _IDENTITY BLOB OTHER_INFOS BLOB
表service_domain_audit_change(mysql中)
字段 类型
ID bigint(11) SERVICE_CODE VARCHAR(100) DOMAIN_NAME VARCHAR(1000) AGENT_CODE VARCHAR(100) NEW_ORGANIZE_NAME_CN VARCHAR(200) NEW_USER_NAME_CN VARCHAR(200) TRANSFER_DATE TIMESTAMP CHECK_DATE TIMESTAMP STATE VARCHAR(10) CHECK_OPERATOR VARCHAR(200) EXT1 VARCHAR(2000) EXT2 VARCHAR(2000) EXT3 VARCHAR(2000) APPLY_TABLE MEDIUMBLOB OLD_ ORGANIZE_IDENTITY MEDIUMBLOB OLD_ USER _IDENTITY MEDIUMBLOB NEW_ ORGANIZE_IDENTITY MEDIUMBLOB NEW_ USER _IDENTITY MEDIUMBLOB OTHER_INFOS MEDIUMBLOB
2.hibernate的配置文件如下:
主要截取了大字段类型:
<property name="applyTable" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"> <column name="apply_table"></column> </property> <property name="oldOrganizeIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"> <column name="OLD_ORGANIZE_IDENTITY"></column> </property> <property name="oldUserIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"> <column name="OLD_USER_IDENTITY"></column> </property> <property name="newOrganizeIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"> <column name="NEW_ORGANIZE_IDENTITY"></column> </property> <property name="newUserIdentity" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"> <column name="NEW_USER_IDENTITY"></column> </property> <property name="otherInfos" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"> <column name="OTHER_INFOS"></column> </property>
3.Oracle中dao配置
<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/> <!--设置本地 Jdbc 对象抽取器--> <bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler"> <property name="nativeJdbcExtractor"> <ref bean="nativeJdbcExtractor"/> </property> </bean> <!--设置 LOB 处理器--> <bean id="domainAuditChangeDao" class="com.tangtang.domainAuditChange.dao.impl.DomainAuditChangeDaoImpl" />
mysql中dao配置
<!--设置 LOB 处理器--> <bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler" /> <bean id="domainAuditChangeDao" class="com.tangtang.domainAuditChange.dao.impl.DomainAuditChangeDaoImpl" />
具体说明如下:
大家可能已经注意到 nativeJdbcExtractor 和 oracleLobHandler Bean 都设置为 lazy-init="true",这是因为 nativeJdbcExtractor 需要通过运行期的反射机制获取底层的 JDBC 对象,所以需要避免在 Spring 容器启动时就实例化这两个 Bean。 LobHandler 需要访问本地 JDBC 对象,这一任务委托给 NativeJdbcExtractor Bean 来完成,因此我们在 ① 处为 LobHandler 注入了一个 nativeJdbcExtractor。最后,我们把 lobHandler Bean 注入到需要进行 LOB 数据访问操作的 PostJdbcDao 中,如 ② 所示。 如果底层数据库是 DB2、SQL Server、MySQL 等非 Oracle 的其它数据库,则只要简单配置一个 DefaultLobHandler 就可以了.
当时做mysql数据库的时候我就直接把oracle数据库的配置文件考过去了,本功能没有问题,在另外一个功能的时候出现了异常org.springframework.dao.InvalidDataAccessApiUsageException: OracleLobCreator needs to work on [oracle.jdbc.OracleConnection], not on [com.mysql.jdbc.Connection]: specify a corresponding NativeJdbcExtractor; nested exception is java.lang.ClassCastException: com.mysql.jdbc.Connection
Caused by:
java.lang.ClassCastException: com.mysql.jdbc.Connection
mysql数据库中已经配置过<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler" />
估计是到那个功能的时候她不知道找那个lobHandler了。
在 Hibernate 中操作 LOB 数据
提示
使用 Spring JDBC 时,我们除了可以按 byte[]、String 类型处理 LOB 数据外,还可以使用流的方式操作 LOB 数据,当 LOB 数据体积较大时,流操作是唯一可行的方式。可惜,Spring 并未提供以流方式操作 LOB 数据的 UserType(记得 Spring 开发组成员认为在实现上存在难度)。不过,www.atlassian.com 替 Spring 完成了这件难事,读者可以通过 这里 了解到这个满足要求的 BlobInputStream 类型。
Hibernate 为处理特殊数据类型字段定义了一个接口:org.hibernate.usertype.UserType。Spring 在 org.springframework.orm.hibernate3.support 包中为 BLOB 和 CLOB 类型提供了几个 UserType 的实现类。因此,我们可以在 Hibernate 的映射文件中直接使用这两个实现类轻松处理 LOB 类型的数据。
BlobByteArrayType:将 BLOB 数据映射为 byte[] 类型的属性;
BlobStringType:将 BLOB 数据映射为 String 类型的属性;
BlobSerializableType:将 BLOB 数据映射为 Serializable 类型的属性;
ClobStringType:将 CLOB 数据映射为 String 类型的属性;
一些参考文章:
1.Spring 让 LOB 数据操作变得简单易行
2.Struts+Spring+Hibernate浅见
3.解决websphere使用LobHandler写LOB字段的很迷惑人的错误
4.我曾经遇到的问题-请教SSH中Clob类型字段不能使用hibernate二级缓存的问题
5.Hibernate+Spring搞定Clob、Blob的存取
发表评论
-
id to load is required for loading
2013-05-07 16:47 1213今天遇到一个bug:id to load is requir ... -
mysql随机获取记录
2012-12-11 12:42 1159MYSQL的随机抽取实现方法。举个例子,要从tablename ... -
分享到微博js
2012-08-02 14:35 9976分享到微博js 1.分享到微博代码: var t ... -
js 定位
2012-02-02 11:31 3062前两天开发一个功能,显示所有记录之后,对某一条记录操作之后, ... -
jstl标签 函数
2012-02-02 11:02 1272jstl标签,fn函数 函数:fn:contains(stri ... -
java.lang.IllegalArgumentException: Failed to parse a valid name/value pair from
2011-11-23 16:48 2383昨天231被封了,所以只能换203的测试库,可是一启动就报错j ... -
JS中setTimeout()的用法详解
2011-11-07 17:20 0setTimeout( ) setTimeout( ) 是 ... -
Spring中的四种声明式事务的配置
2011-10-18 14:15 990Spring中的四种声明式事务的配置Spring容器中有两种 ... -
事务的传播行为和隔离级别
2011-10-18 11:13 2670一。Spring在TransactionDefi ... -
Spring 利用PropertyPlaceholderConfigurer占位符
2011-10-18 10:54 34441.Spring的框架中,org.springframew ... -
js动态添加删除表格
2011-10-11 15:25 1544//动态添加行 function addRowMx( ... -
Duplicate class/entity mapping com.sitechasia.xinnet.admin.checkip.model.AdmUser
2011-09-19 14:56 2220今天还算有点时间,就同步了一下我工作空间和cvs服务器上的代码 ... -
java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape
2011-09-19 10:32 23792java编码解码 前两天修改了个功能,登陆的时候密码为‘% ... -
servlet页面跳转
2011-09-15 17:26 7914昨天晚上在公 ... -
ContentType
2011-08-25 10:14 1058[size=medium]ContentType 属性指定响 ... -
简单的下载例子
2011-08-25 10:07 1334前两天看代码,有一个下载的例子,我觉得写得挺全面 ... -
Spring Quartz定时器
2011-08-23 15:25 1499Spri ... -
java操作Excel(Jakarta_POI)
2011-08-23 14:15 1256一。 Jakarta POI 是一套用于访问微软 ... -
POI类库之工作表中文名乱码问题
2011-08-23 13:52 2054POI类库是JAVA平台下操作EXCEL的类库,功 ... -
cvs.exe [checkout aborted]: connect to scm1.ceopen.cn:2401 failed: 套接字操作尝试一个无法连接
2011-08-12 13:29 1931昨天想在cvs服务器上更新代码,但是一点更新之 ...
相关推荐
首先,我们需要一个数据访问层,例如`PostJdbcDao2.java`,在这个类中,我们将定义用于处理LOB字段的方法。Spring JDBC Template是进行数据库操作的强大工具,它简化了与JDBC的交互,使我们能够避免处理数据库连接和...
接下来是Hibernate的映射文件(hbm.xml)配置,同样需要指定lob-type以确保正确处理LOB字段: ```xml ``` 为了连接Oracle数据库,你需要在项目的类路径下包含Oracle的JDBC驱动,这里...
第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。 第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到ORM...
12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis 12.3.1 配置SqlMapClient 12.3.2 ...
当涉及到数据库操作,特别是处理大型二进制对象(Binary Large Object,简称BLOB)时,Spring提供了灵活且强大的支持。Oracle数据库是企业级应用广泛采用的关系型数据库系统,它也支持BLOB类型来存储大量的二进制...
在处理大数据字段时,通常涉及到的是文本、图片或者其他大型二进制数据,这些数据不适合直接存储在数据库的普通字段中,因为这可能会导致性能下降,甚至可能超出数据库字段的限制。在Spring1.2和Hibernate2的环境下...
12.2.3 处理LOB类型数据 12.2.4 添加Hibernate事件监听器 12.2.5 使用原生Hibernate API 12.2.6 使用注解配置 12.2.7 事务处理 12.2.8 延迟加载的问题 12.3 在Spring中使用myBatis 12.3.1 配置SqlMapClient 12.3.2 ...
由于这个库主要是针对Oracle数据库设计的,所以很多特定的方法可能只适用于Oracle,比如处理lob类型数据、序列或者触发器相关的操作。在使用时,需要根据Oracle的特性和JdbcTemplate的API进行适当调整。
根据提供的标题、描述以及部分代码内容,我们可以整理出关于如何在Spring框架中处理Oracle数据库中的BLOB类型数据的相关知识点。 ### 一、BLOB类型简介 BLOB(Binary Large Object)是二进制大对象的缩写,通常...
在 Spring 中,`OracleLobHandler` 负责处理 Blob 类型的字段,确保与数据库驱动程序解耦,并适应不同数据库的 Lob 处理方式。数据表的 Blob 字段在 Java 对象中声明为 `byte[]` 类型,而在 Hibernate 映射文件中...
SpringMVC 是 Spring 框架的一个模块,专门用于处理Web应用的请求-响应模型,提供了一个轻量级的MVC架构。 **Hibernate ORM** Hibernate 是一个Java持久层框架,它简化了与关系数据库之间的交互。在Spring框架中,...
总结起来,"spring mvc+hibernate 图片存储至blob"这个主题涉及到Spring MVC处理文件上传、Hibernate将图片数据存入数据库BLOB字段、以及前后端交互等多个技术点。通过理解这些知识点,开发者可以构建一个完整的图片...
11. **@Lob**: 用于标记字段为Blob或Clob类型,用于存储大对象数据。 12. **@Basic(fetch = FetchType.LAZY)**: 结合@Lob使用,用于延迟加载大数据字段,提高性能。 13. **@Repository**: 标记数据访问组件,通常...
第11章:讲解了如何使用Spring JDBC进行数据访问操作,我们还重点讲述了LOB字段处理、主键产生和获取等难点知识。 第12章:讲解了如何在Spring中集成Hibernate、myBatis等数据访问框架,同时,读者还将学习到...
在 Java 中,处理 Clob 类型需要使用 @Lob 注解来指定该字段为大规模字符数据类型。@Lob 注解可以与 @Basic 注解结合使用,以确保正确地读取和写入 Clob 类型的数据。例如: ``` @Column(name="SUBSTANCE", ...
文件数据存储在Blob类型的FILE_CONTENT表字段上,在Spring中采用OracleLobHandler来处理Lob字段(包括Clob和Blob),由于在程序中不需要引用到oracle数据驱动程序的具体类且屏蔽了不同数据库处理Lob字段方法上的...
在Spring配置文件中,你需要创建一个`SessionFactory` bean,同时指定一个`lobHandler`属性,用于处理CLOB和BLOB类型的数据。这确保了Spring和Hibernate能够正确地与Oracle数据库交互处理大对象。 ```xml ...
### Spring与Hibernate处理大字段(CLOB/BLOB) 在企业级应用开发中,经常会遇到需要存储大量文本或二进制数据的情况,这时就需要用到数据库的大字段类型如CLOB(Character Large Object)和BLOB(Binary Large ...
通过Spring Data JPA,开发者可以更加专注于业务逻辑的实现而非底层的数据访问细节。 #### 二、Spring Data JPA 核心概念与使用流程 ##### 2.1 核心概念 - **Repository**: Spring Data JPA 的核心接口,通过继承...
文件数据存储在 Blob 类型的 FILE_CONTENT 表字段上,在 Spring 中采用 OracleLobHandler 来处理 Lob 字段,屏蔽了不同数据库处理 Lob 字段方法上的差别,从而撤除程序在多数据库移植上的樊篱。 在 Java 领域对象中...